【问题标题】:PHP PDO mysql query to work with both column = '$var' and column IS NULL [duplicate]PHP PDO mysql查询同时使用column ='$var'和column IS NULL [重复]
【发布时间】:2020-11-23 10:08:52
【问题描述】:

我有一个很长的mysql查询,根据状态字段选择数据。我为不同的状态调用它,它运行良好,但我有一个场景,当我应该获取所有状态为空的记录时。有没有办法做到这一点而不必编写 2 个不同的 sql 查询?

如果不将其呈现为字符串,我似乎无法插入“IS NULL”或“=”。

我想实现这个:

$sql = "SELECT name, surname FROM ...
       ...             
       WHERE status ?;";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($status === 'undefined' ? 'IS NULL' : " = '$status'"));
    

毕竟,这就是我所做的:

$sql = "SELECT name, surname FROM ...
       ...             
       WHERE status <=> ?;";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($status === 'unfinished' ? null : $status));

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

如前所述,使用参数化查询是将用户输入引入 SQL 语句的一种更安全的方法。但是,它具有将所有输入视为参数的效果,因此会将任何字符串文字用引号括起来 - 导致您遇到的问题。

要处理这个问题,何不直接修改代码的逻辑:

$sql = "SELECT name, surname FROM ...
       ...             
       WHERE status";

if ($status === 'undefined') {
    $sql .= " IS NULL";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
} else {
    $sql .= " = ?"
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array($status));
}

编辑

更新为将执行移至if 语句的相关部分,因为如果 SQL 语句中没有占位符,则不得指定参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-02-23
    相关资源
    最近更新 更多