Я просмотрел по всему Интернету ответы на этот вопрос, и подготовленные заявления и привязанные параметры появились (я понятия не имею, что это за материал)
В принципе, у меня есть список, разделенный запятыми
$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; }