Я пытаюсь взять массив идентификационных номеров и обновить каждую строку с этим идентификационным номером. PHP PDO-код:
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(); }
Однако, когда это выполняется, обновляется только первый элемент в списке, хотя регистрируются несколько идентификационных номеров. Как изменить это, чтобы обновить несколько строк?
Заполнитель может представлять только одно атомное значение. Причина, по которой это работает, заключается в том, что значение 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));