使用 MySQL 和 PDO,我有以下准备好的语句:
$stmt = $bdd->prepare('SELECT field FROM table WHERE category=:category;');
然后如果我执行以下操作,它工作正常,我在 $results
中拥有我想要的一切:
$stmt->execute(array('category' => $someCategory));
$results = $stmt->fetchAll();
但是,我也希望能够在没有WHERE
子句的情况下执行相同的语句。是否可以执行准备好的语句并让它忽略 WHERE
子句(例如不传递任何参数)?
或者我是否必须创建一个新的 SELECT field FROM table;
查询?
注意:$stmt->execute();
返回 “没有为准备好的语句中的参数提供数据”
和 $stmt->execute(array( 'category' => ''));
什么都不返回。
谢谢
最佳答案
我认为@Oldskool 提出的if...else
解决方案适用于这种情况,但这里有另一个可能有用的想法。
这允许您使用另一个参数来打开和关闭过滤器(WHERE 子句)。
$stmt = $bdd->prepare('SELECT field FROM table WHERE (1=:filter AND category=:category) OR (0=:filter);');
$stmt->execute(array(
'filter' => 1, //1 = on; 0 = off
'category' => $someCategory));
$results = $stmt->fetchAll();
关于php - 准备好的查询中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33101976/