【问题标题】:PDO execute error with conditional SQLPDO 使用条件 SQL 执行错误
【发布时间】:2012-09-30 15:04:40
【问题描述】:

我想有条件地构建一条 SQL 语句,但遇到了问题。在这种情况下,可能有也可能没有 WHERE 子句。

$sql=null;
$arr='';

if( $id != 'all' ){
    $sql = '  WHERE type = :type AND id=:id';
    $arr = array(':type'=>$type,':id'=>$id);
}

$stmt = $dbh->prepare("SELECT * FROM table $sql");
$stmt->execute($arr);
...

如果id等于'all',那么我只想重写没有WHERE子句的sql。 由于我必须通过 $arr 才能执行,所以当 id = 'all' 时出现以下错误,因为 execute 需要一个值: PHP 警告:PDOStatement::execute() 期望参数 1 是数组,给定字符串

我尝试传递执行一个空数组,但也出现错误。 如何在不必重写两个完整的 sql 块的情况下做到这一点,每个块都有自己的执行 statememt?

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    您似乎需要将prepare 语句移动到if 部分,为第二种情况添加第二条准备语句。如果您还为 id === 'all' 添加了 else 可能会更好(为了便于阅读)。

    【讨论】:

    • 谢谢。这就是我目前拥有它的方式,但是伙计,看起来必须有更好的方法来处理这个问题。不过你可能是对的。
    • 我猜你是对的。 :) 我把答案归功于你。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2012-12-29
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多