2012-05-12 43 views
2

我試圖獲取ID數組的數組,並用該ID號更新每一行。 PHP PDO代碼如下:PHP PDO:更新SQL中的數組WHERE IN()子句

private function markAsDelivered($ids) { 
    $update = $this->dbh->prepare(" 
    UPDATE notifications 
    SET notified = 1 
    WHERE notification_id IN (
     :ids 
    ) 
    "); 
    $ids = join(',', $ids); 
    Logger::log("Marking the following as delivered: " . $ids, $this->dbh); 
    $update->bindParam(":ids", $ids, PDO::PARAM_STR); 
    $update->execute(); 
} 

然而,當這個運行時,只有列表中的第一項得到更新,雖然正在記錄多個ID號。我如何修改這個更新多行?

+0

的可能重複[PHP PDO:我可以數組綁定到IN()條件?(http://stackoverflow.com/questions/920353/php- pdo-can-i-bind-an-array-to-an-in-condition) – CharlesB

回答

6

佔位符只能表示單個原子值。它有點奏效的原因是因爲mysql看到的值是'123,456'的形式,它將其解釋爲一個整數,但在遇到非數字部分(逗號)後丟棄字符串的其餘部分。

相反,這樣做

$list = join(',', array_fill(0, count($ids), '?')); 
echo $sql = "...where notification_id IN ($list)"; 
$this->dbh->prepare($sql)->execute(array_values($ids)); 
+0

工作完美,謝謝你的解釋! –