Внедренный целочисленный массив PHP для предложения Mysql NOT IN - PullRequest
4 голосов
/ 15 июня 2011

Я пытался использовать целочисленный массив 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как массив.Также я проверил, есть ли значения, хранящиеся в массиве.Я также не цитировал массив целых чисел, но затем я получил ошибку синтаксиса mysql из-за отсутствия их.

Ответы [ 3 ]

6 голосов
/ 15 июня 2011

Проблема состоит в двух в начале и конце блока IN.Они приводят к тому, что весь массив implode становится строкой, разделенной запятыми.

3 голосов
/ 15 июня 2011

Ваш фактический запрос будет выглядеть так:

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

"1,2,3,4" - это одна строка , а не несколько значений. Избавьтесь от " цитат.

0 голосов
/ 15 июня 2011

Вы можете попытаться использовать 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 для повышения производительности советуются!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...