[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: опциональные паретры для sprintf
hookman
Дано:

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 ? она не для этого предназначена
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)
{
        $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;
}

Для того чтобы к примеру убедиться что переданный от пользователя параметр это число.


$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;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.