php - 准备好的查询中的可选参数

标签 php mysql sql pdo

使用 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/

相关文章:

mysql - SUM 的 GROUP_CONCAT

php - 用一个sql查询选择两行

php - SQL UNIQUE约束的错误处理?

javascript - AJAX 调用发送 JSON 数据

javascript - 如何通过序列化表单数据发送数据

php - 如果 HTML 文件已更新,则执行 JavaScript

mysql - 理解这个 MySQL 查询

mysql - 根据订单更新库存表数量

java - 所有聚类列的总和太长 (65927 > 65535)

PHP 登录页面无法正常工作