Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql NOT IN子句的内爆PHP整数数组_Php_Mysql_Mysql Error 1064 - Fatal编程技术网

Mysql NOT IN子句的内爆PHP整数数组

Mysql NOT IN子句的内爆PHP整数数组,php,mysql,mysql-error-1064,Php,Mysql,Mysql Error 1064,我一直在尝试将PHP整数数组用于MySQL查询,该查询使用NOT IN子句,但尽管没有错误,它似乎总是返回我想要过滤掉的结果 例如: $IDS = $_SESSION['Posts']; $Select = 'SELECT * FROM status WHERE (W_ID = '.$ID.') AND (ID NOT IN ("'.implode(',', $IDS).'")) ORDER

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

例如:

$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语法错误。

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

您的实际查询如下所示:

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

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

您可以尝试使用
FIND\u IN\u 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中用于性能的单引号是延迟的!)

删除这些仍然会给我一个错误:您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解可使用的正确语法(near'))ORDER BY ID DESC LIMIT 0,20',第1行SELECT*FROM status WHERE(W_ID=3)和(ID不在(3,4,5,6))ORDER BY ID DESC LIMIT 0,20——此SQL非常有效。Post yours PLESETHAKS我发现第一轮循环的初始值为空,您的解决方案有效。关于输入值,也请检查mario的答案。正如他指出的,依赖输入数据并不总是安全的。
not IN
USER74439使用的是perfec非常有效。是的,它是有效的。它甚至是可取的。但是这个更容易使用,并且似乎更适合OP。(更容易保护,不确定ID值的来源)对不起,我指的是在集合中找到集合。同意你的逃跑部分。你应该在你的回答中提到这一点。我用了很长时间,但发现了某种奇怪的行为。我使用了
WHERE NOT IN(1,2,34,65,78,87,90105)
它返回了类似
10,15,25,60,87,90的内容,因此无法正常工作。您是如何删除它的?