在 MYSQL 中使用 IN 会导致 PHP 中的变量出现问题

Posted

技术标签:

【中文标题】在 MYSQL 中使用 IN 会导致 PHP 中的变量出现问题【英文标题】:Using IN in MYSQL cause issues with variables in PHP 【发布时间】:2016-05-14 14:58:27 【问题描述】:

在网站上工作时,我发现 PDO 存在一个相当奇怪的问题。以下代码仅选择用户 1 发布的帖子,而不选择用户 3。

$sql = "SELECT postid FROM posts WHERE userid IN (:friends)";
$pdo->prepare($sql);
$pdo->execute(array(':friends' => '1, 2, 3'));

但是,以下代码从所有三个中选择帖子:

$sql = "SELECT postid FROM posts WHERE userid IN (1, 2, 3)";
$pdo->prepare($sql);
$pdo->execute();

为什么会这样,我该怎么做才能让第一个工作像第二个一样?

【问题讨论】:

有些东西不见了 - selects posts made by user 1, not or 3。你的意思是1, not 2 or 3 php PDO prepared statement IN() array的可能重复 PDO binding values for mysql IN statement的可能重复 【参考方案1】:

你必须这样写查询

$sql = "SELECT postid FROM posts WHERE userid IN (:friend1, :friend2, :friend3)";
$pdo->prepare($sql);
$pdo->execute([
    ':friend1' => '1',
    ':friend2' => '2',
    ':friend3' => '3',
]);

【讨论】:

以上是关于在 MYSQL 中使用 IN 会导致 PHP 中的变量出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Php Mysql NOT IN 数组只影响数组中的第一个结果

mysql in 会使用索引吗

使用 MySql、PHP 和 ADODB 在准备好的语句中参数化 IN 子句

php代码中的错误mysql更新命令

带有 MySQL 的 JDBC - SELECT ... IN

MySQL优化:索引失效分析in与exists使用场合