Как использовать & quot; IN & quot; оператор в подготовленном выражении в переполнении стека

я буду использовать оператор «IN» с использованием параметра в подготовительном операторе
но я не могу этого сделать

$hotel_list = "SELECT DISTINCT h.hotel_id, h.hotel_name, h.hotel_address, h.hotel_image
FROM type_feture tf
JOIN type t ON t.type_id = tf.type_id
JOIN hotel h ON h.hotel_id=t.hotel_id
WHERE tf.feture_id IN ?
AND h.hotel_city_id=?
GROUP BY tf.type_id, h.hotel_id, h.hotel_name, h.hotel_address HAVING COUNT(tf.type_id)>=?";
$result = $dbca->prepare($hotel_list);
$result->bind_param("sii", $feture,$city_ide,$cnt_type);
$feture=(string)$finish;
$city_ide = (int)$hotel_city_id;
$cnt_type=(int)$cn;
$result->execute();
$res = $result->get_result();
while ($obj = $res->fetch_object()) {
$hotels[] = $obj;
}

0

Решение

Потому что это требование к дизайну, что вы должны использовать IN оператор и подготовленные операторы, вам нужен способ для преобразования массива PHP (value 1, value 2, value 3, ... value n) в массив SQL (value 1, value 2, value 3, ... value n), Вам понадобится промежуточный шаг, поскольку объекты PHP нельзя напрямую преобразовать в SQL без помощи каких-либо функций или циклов.

Ваш мыслительный процесс должен быть: что общего между двумя переменными? Ответ: оба они являются списками и могут быть представлены в виде строк. Чтобы решить вашу проблему, вы должны преобразовать список PHP в строку, разделенную запятыми, в массив SQL, а затем проверить в запросе SQL, имеет ли указанный столбец значение в этом массиве.

Для этого нужно внести только два изменения в код:

1) Создать переменную $feature_ids_str и сделайте его разделенной запятыми строковой версией любого массива, содержащего ваши идентификаторы функций (согласно комментариям на ваш вопрос, было бы действительно полезно, если бы вы дали нам еще немного кода, чтобы объяснить, откуда взялись некоторые из этих переменных). Пример значения $feature_ids_str было бы "1,5,3,7,82,4",

2) Изменить ваш запрос следующим образом: ... WHERE tf.feture_id IN STRING_SPLIT(?, ',') ... [feture_id sic] и, конечно, обновить $result->bind_param() функционировать соответственно.

Кроме того, я думаю, что вы неправильно пишете «особенность».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]