function data_a($par1, $par2, $par3)
{
$query = "SELECT * FROM `table` WHERE 1=1";
$where = '';
if (!empty($par1)) { $where .= " AND `par1` = '%s'"; }
if (!empty($par2)) { $where .= " AND `par2` = '%s'"; }
if (!empty($par3)) { $where .= " AND `par3` = '%s'"; }
$str = $query . $where;
echo sprintf($str, $par1, $par2, $par3);
}
Задача:
если к примеру par2 пустой, убрать его из sprintf
e.g echo sprintf($str, $par1,$par3)
Спустя 9 минут, 39 секунд (22.10.2011 - 01:41) Игорь_Vasinsky написал(а):
function data_a($par1 = "", $par2 = "", $par3 = "")
Спустя 2 минуты, 17 секунд (22.10.2011 - 01:43) Игорь_Vasinsky написал(а):
а... не дочитал. зачем автоматом убирать - ты всё равно ручками функцию вызываешь и будешь вызывать
Спустя 28 минут, 45 секунд (22.10.2011 - 02:12) hookman написал(а):
Цитата (Игорь_Vasinsky @ 21.10.2011 - 22:43) |
а... не дочитал. зачем автоматом убирать - ты всё равно ручками функцию вызываешь и будешь вызывать |
Функцию - да. Но что она будет возвращать если один из параметров будет пуст?
data_a('incomeppc','','3333');
SELECT * FROM `table` WHERE 1=1 AND `par1` = 'incomeppc' AND `par3` = ''
Получается что по сути par3 заменяется на par2, а par2 у нас пуст...
Спустя 38 минут, 9 секунд (22.10.2011 - 02:50) Invis1ble написал(а):
hookman
зачем тебе sprintf ? она не для этого предназначена
зачем тебе sprintf ? она не для этого предназначена
function data_a($par1, $par2, $par3)
{
$where = array();
if (!empty($par1)) $where[] = "`par1` = '" . $par1 . "'";
if (!empty($par2)) $where[] = "`par1` = '" . $par2 . "'";
if (!empty($par3)) $where[] = "`par1` = '" . $par3 . "'";
$query = "SELECT * FROM `table`" . (!empty($where) ? ' WHERE' . implode(' AND ', $where) : '');
echo $query;
}
Спустя 13 часов, 2 минуты, 22 секунды (22.10.2011 - 15:52) hookman написал(а):
Цитата (Invis1ble @ 21.10.2011 - 23:50) |
hookman зачем тебе sprintf ? она не для этого предназначена function data_a($par1, $par2, $par3) |
Для того чтобы к примеру убедиться что переданный от пользователя параметр это число.
$query = mysql_query(sprintf("SELECT * FROM `table` WHERE `id` = '%d'",
mysql_real_escape_string($id)
));
Ваше решение мне подходит, спасибо
Добавил только mysql_real_escape_string, SQLi нам не нужны
function data_a($par1, $par2, $par3)
{
$where = array();
if (!empty($par1)) $where[] = "`par1` = '" . mysql_real_escape_string($par1) . "'";
if (!empty($par2)) $where[] = "`par2` = '" . mysql_real_escape_string($par2) . "'";
if (!empty($par3)) $where[] = "`par3` = '" . mysql_real_escape_string($par3) . "'";
$query = "SELECT * FROM `table`" . (!empty($where) ? ' WHERE ' . implode(' AND ', $where) : '');
echo $query;
}