php - 忽略特定的 WHERE 标准

标签 php mysql pdo where-clause

我想执行参数化查询,以通过用户提供的参数执行搜索。有很多参数,并不是所有的参数都会一直提供。我如何进行标准查询以指定所有可能的参数,但如果用户没有选择有意义的参数值则忽略其中一些参数?

这是一个想象的例子来说明我要做什么

$sql = 'SELECT * FROM people WHERE first_name = :first_name AND last_name = :last_name AND age = :age AND sex = :sex';
$query = $db->prepare($sql);
$query->execute(array(':first_name' => 'John', ':age' => '27');

显然,这是行不通的,因为提供的参数数量与预期参数数量不匹配。我是否必须每次都只在 WHERE 子句中包含指定的参数来设计查询,或者有没有办法让其中一些参数被忽略或在检查时始终返回 true?

最佳答案

SELECT * FROM people 
WHERE (first_name = :first_name or :first_name is null)
AND (last_name = :last_name or :last_name is null)
AND (age = :age or :age is null)
AND (sex = :sex or :sex is null)

传递参数时,为不需要的参数提供null

请注意,要能够以这种方式运行查询,必须打开 PDO 的仿真模式 ON

关于php - 忽略特定的 WHERE 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231597/

相关文章:

php - 编码 MySQL、PHP 和 CSV 文件

java - 运行 SynchronizeMappings 时出现 PersistenceException

javascript - Symfony - 在外部 JS 文件中创建路由

php - 如何用GET参数转发?

php - PHP登录到error_log上的特定错误

在/var/run 中找不到/创建 php5-fpm.sock

php - Laravel项目如何远程连接mysql数据库

php, mysql - 数据库错误连接太多

php - SQL UNION 只返回第一个 SELECT 的结果

php - Web 主机可以停止 pdo->prepare() 运行吗?