Mysql NOT IN子句的内爆PHP整数数组
我一直在尝试将PHP整数数组用于MySQL查询,该查询使用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
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的内容,因此无法正常工作。您是如何删除它的?