我一直在尝试为使用NOT IN
子句的MySQL查询使用PHP整数数组,但尽管没有错误,它似乎总是返回我想要过滤掉的结果。
示例:
$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被视为一个数组。此外,我还测试了数组中是否存储了值。我也没有引用整数数组,但后来我得到了一个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中的单引号表示性能延迟!)