我想有条件地构建一个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?
答案 0 :(得分:0)
看起来您需要将prepare
语句移动到if
部分,为第二种情况添加第二个准备语句。如果您在else
时添加id === 'all'
,可能会更好(为了便于阅读)。