Я хочу создать 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 …
Любое предложение ?
Ты можешь использовать implode()
.
Использование: string implode ( string $glue , array $pieces )
mysqli_query($this->conn, "SELECT * FROM `tale_name` WHERE `id` in (". implode(',', $id_array) .")");
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
на этот запрос.