繁体   English   中英

PHP PDO:Update SQL WHERE IN()子句中的数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM