MYSQLI – WHERE IN array

Я просмотрел по всему Интернету ответы на этот вопрос, и подготовленные заявления и привязанные параметры появились (я понятия не имею, что это за материал)

В принципе, у меня есть список, разделенный запятыми

$list = 'food, drink, cooking'; 

Хорошо, теперь я хочу искать каждый из этих элементов в столбце базы данных … Звучит просто, не так ли?

 $query = "SELECT * FROM table WHERE stuff IN ('$list')"; $runquery = mysqli_query($connection, $query); while($row = mysqli_fetch_array($runquery,MYSQLI_ASSOC)){ $variable = $row; } 

Затем,

 var_dump($variable); 

НЕОПРЕДЕЛЕННАЯ ПЕРЕМЕННАЯ

Зачем? Я не вижу ничего плохого в коде. Он работает, если я ставлю определенное значение, и я проверил его с WHERE stuff=$item – это отлично работает.

Таким образом, это не переменные / база данных, это ошибка в инструкции IN. Я не понимаю, почему это не сработает.

Каждому элементу нужны котировки вокруг него

 $list = "'food', 'drink', 'cooking'"; $query = "SELECT * FROM table WHERE stuff IN ($list)"; 

Или если у вас есть массив

 $array = array("food","drink","cooking"); $query = "SELECT * FROM table WHERE stuff IN (".implode(',', $array).")"; 

Я подозреваю, что в любое время, когда запрос не возвращает строку, вы получите это НЕОПРЕДЕЛЕННОЕ ПЕРЕМЕННОЕ. Мы не видим, что переменная определена / инициализирована в любом месте, кроме как после выбора строки.

Поскольку запрос не возвращает строку, ваш запрос эквивалентен

  ... WHERE stuff = 'food, drink, cooking' 

Это единственный строковый литерал. Запрос будет только возвращать строки, если материал столбца равен этой строке. Запятые внутри этой строки являются лишь частью значения. Если вы хотите найти строки, в которых материал содержит какие-либо значения, ваш запрос должен иметь форму:

  ... WHERE stuff IN ('food','drink','cooking') 

Обратите внимание, что это три отдельных строковых литерала, разделенных запятыми. Запятые являются частью инструкции SQL, а не частью значения. Это вернет строки, в которых материал столбца содержит «пищу». Или «выпить». Или «приготовление пищи».

Вот почему ваш запрос «не работает».

Ваш список: $list = 'food, drink, cooking'; , Но вы не можете вставить его в WHERE IN . Вы должны подготовить его: взорвать строку $list , затем вставить ее в соответствующие кавычки и передать ее в позицию IN.

Попробуйте этот код:

 $list = 'food, drink, cooking'; $listArray = array_map('trim', explode(',', $list)); $listWhere = "('".implode("','", $listArray)."')"; $query = "SELECT * FROM table WHERE stuff IN ".$listWhere; $runquery = mysqli_query($connection, $query); while($row = mysqli_fetch_array($runquery,MYSQLI_ASSOC)){ $variable = $row; }