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/43834927/

相关文章:

php - 编码为 Utf8,我有一些

php - PHP 中非常奇怪的行为

php - 用于获取地理位置记录的 MySQL 查询优化

PHP更新大型数据库

php - 选择具有两个条件的两个表

php - 组织 3 个文件 : PHP, HTML、JS 和 Smarty

php - 性能:将大型 mysql 结果存储在类变量 VS 结果数组中

php - 为什么我不能在 Eclipse 中选择 xdebug 作为 php 调试器

mysql - SQL 查询计算的数据多于现有数据

php - mysql 过程中游标循环后的 select 语句在 pdo 中没有输出,但在 phpmyadmin 中有输出