0

我想有条件地构建一个 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 块的情况下做到这一点,每个块都有自己的执行语句?

4

1 回答 1

0

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

于 2012-09-30T15:07:35.043 回答