2012-09-30 71 views
0

我想有条件地构建SQL语句并遇到问题。在这种情况下,可能有一个WHERE子句或没有。使用条件SQL执行PDO错误

$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'时出现下面的错误,因为执行期望值: PHP警告:PDOStatement :: execute()期望参数1是数组,字符串给出

我试着通过执行一个空数组,但也得到一个错误。 如何做到这一点,而不必重写两个完整的sql块,每个块都有自己的执行状态?

回答

0

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

+0

谢谢。这就是我现在拥有它的方式,但是人,它看起来必须有一个更好的方式来处理这个。你可能是对的。 – NaN

+0

我想你是对的。 :)我已经记下你的答案。谢谢。 – NaN