php - 带有 "WHERE... IN"查询的 PDO

标签 php pdo

<分区>

我正在重新编写一些 PHP 代码以使用 PDO 进行数据库访问,但我遇到了“WHERE...IN”查询的问题。

我正在尝试从数据库中删除一些内容,这些内容基于检查了表单上的哪些项目。列表的长度和内容会有所不同,但对于这个例子,假设它是这样的:

$idlist = '260,201,221,216,217,169,210,212,213';

然后查询看起来像这样:

$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
$st = $db->prepare($query);
$st->execute(array(':idlist' => $idlist));

当我这样做时,只有第一个 ID 被删除。 (我假设它会抛出逗号及其后的所有内容。)

我也试过让 $idlist 成为一个数组,但它并没有删除任何东西。

在 PDO 准备好的语句中使用项目列表的正确方法是什么?

最佳答案

由于您不能将值(数字)与控制流逻辑(逗号)与准备好的语句混合在一起,因此每个值需要一个占位符。

$idlist = array('260','201','221','216','217','169','210','212','213');

$questionmarks = str_repeat("?,", count($idlist)-1) . "?";

$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");

并循环绑定(bind)参数。

关于php - 带有 "WHERE... IN"查询的 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2373562/

相关文章:

javascript - 使用 AJAX 调用 php 函数一直失败

javascript - 提交 from,由 ajax 请求处理

php - 哪个性能更好 : double quoted strings with variables or single quoted strings with concatenations?

php - 在PDO准备语句中,对于多个插入查询执行两次。为什么?

php - 难以创建指向 MySQL 表中存储文件的链接

php - 无法使用 PDO : unixODBC 连接到 MSSQL PHP7

php - JQuery 自动完成结果

php - 如何解析php中的动态_POST变量

php - 如何使用 PDO 检索包含许多表的表

javascript - 连接表时准备好的语句使图片显示在 php 页面上