Как использовать цикл for, оператор IN в том же mysqli_query в переполнении стека

Я хочу создать mysqli_query, желание вернет базу данных кортежей на основе списка идентификаторов.

В SQL, запрос будет следующим:

SELECT * FROM `tale_name` WHERE `id` in(1,2,3,4);

Предположим, что идентификаторы помещены в массив PHP $ id_array, так как я могу написать тот же запрос, но в Код PHP?

Для начала я попробовал следующий код (но я знаю, что это не так):

mysqli_query($this->conn, "SELECT * FROM `tale_name` WHERE
`id` in (".for ($i = 0; $i < count($id_array); $i++){ echo $id_array[$i]}.")");

Кажется, что цикл for не может быть объединен с mysqli_query в PHP …
Любое предложение ?

0

Решение

Ты можешь использовать implode().

Использование: string implode ( string $glue , array $pieces )

mysqli_query($this->conn, "SELECT * FROM `tale_name` WHERE `id` in (". implode(',', $id_array) .")");
0

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

echo функция для вывода. Вам нужно будет создать переменную и затем соединить ее с вашей строкой. Вы должны бросить его на int как минимум, чтобы предотвратить SQL-инъекции, лучшая практика заключается в параметризации вашего запроса.

$ids ='';
for ($i = 0; $i < count($id_array); $i++){
$ids .= ((int)$id_array[$i]) . ', ';
}
$ids = rtrim($ids, ', ');
echo "SELECT * FROM `tale_name` WHERE `id` in ({$ids})";

Параметризованная версия:

$placeholders = str_repeat('?, ', count($id_array));
$placeholders = rtrim($placeholders, ', ');
echo "SELECT * FROM `tale_name` WHERE `id` in ({$placeholders})";

Тогда используйте prepare, bind_param, а также execute на этот запрос.

1

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