2010-10-07 3 views
1

Скажем, у меня есть этот запрос:Есть ли способ сделать параметр необязательным в PHP PDO?

$qry = 'SELECT p.id FROM products p 
     WHERE p.type = :type AND p.parent = :parent'; 

Если бы я хотел сделать «тип» по желанию, то единственный способ я знаю, как сделать это было бы сделать что-то вроде этого:

$qry = 'SELECT p.id FROM products p 
     WHERE p.parent = :parent'; 

if(isset($type)) 
{ 
    $qry .= 'AND p.type = :type'; 
} 

ли это лучший способ? Мне интересно, есть ли способ сохранить его как оригинал и использовать какой-то параметр, чтобы указать, что он является необязательным ... Например, если $ type = "*", то вытащите все типы.

Каков наилучший способ сделать это?

ответ

1

Вы можете проверить для пустых значений, а

if(isset($type) && $type != '') { 
    $qry .= 'AND p.type = :type'; 
} 
+1

или просто 'if (! Empty ($ type)) {}' – choise

+1

Это зависит от того, является ли пустое значение, если допустимое значение для поля это не так? –

+1

@choise Мне нравится! = '', Поскольку empty() видит 0 (int/string) и FALSE как пустые, но они могут быть приемлемыми значениями. –

0

Теоретически это может работать:

AND :type IN (NULL, p.type) 

Не уверен о быстроте. Но он полностью помещает вашу логику запроса в базу данных.