繁体   English   中英

Mysql NOT IN 子句的内爆 PHP integer 阵列

[英]Imploded PHP integer array for Mysql NOT IN clause

我一直在尝试将 PHP integer 数组用于使用NOT IN子句的 MySQL 查询,但尽管没有错误,它似乎总是返回我想要过滤掉的结果。

例子:

$IDS = $_SESSION['Posts'];
$Select = 'SELECT * 
             FROM status 
            WHERE (W_ID = '.$ID.') 
              AND (ID NOT IN ("'.implode(',', $IDS).'")) 
         ORDER BY ID DESC 
            LIMIT '.$Begin.', '.$Number.'';

$Select = mysql_query($Select) OR DIE(mysql_error());

我很确定这是一个逻辑语法错误。

我测试过的内容:

我确保 $IDS 被视为一个数组。 我还测试了数组中是否存储了值。 我也没有引用 integer 数组,但后来因为没有它们而出现 mysql 语法错误。

问题是IN块开头和结尾的两个 它们使整个内爆数组成为逗号分隔的字符串。

您的实际查询将如下所示:

ID NOT IN ("1,2,3,4")

"1,2,3,4"一个字符串,而不是几个值。 去掉"引号。

您可以尝试使用FIND_IN_SET而不是IN子句。

  $IDS = mysql_real_escape_string(implode(',', $IDS));
  $Select = "SELECT * FROM status WHERE (W_ID=$ID)
             AND (NOT FIND_IN_SET(ID, '$IDS'))
             ORDER BY ID DESC LIMIT $Begin, $Number";

无论如何,在 SQL 中,您需要对字符串使用单引号,而不是双引号。 这适用于 MySQL,但不适用于所有配置。 如果你反过来做,也会变得更具可读性。 (PHP 中的单引号表示性能延迟建议!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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