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

| 我一直在尝试对使用
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\"
是一个字符串,不是几个值。除去6引号。     
        您可以尝试使用
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中的单引号会影响性能!)     

要回复问题请先登录注册