[英]PHP PDO: Array in Update SQL WHERE IN () clause
我正在尝试获取ID号数组,并使用该ID号更新每一行。 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();
}
但是,运行此命令时,尽管正在记录多个ID号,但是列表中的第一项才被更新。 如何修改它以更新多个行?
占位符只能表示单个原子值。 之所以可行,是因为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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.