2012-09-30 75 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