PDO使用条件SQL执行错误

时间:2012-09-30 15:04:40

标签: php pdo

我想有条件地构建一个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块的情况下执行此操作,每个sql都有自己的execute statememt?

1 个答案:

答案 0 :(得分:0)

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