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

0

Я хочу создать 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 loop can not сочетается с mysqli_query в PHP... Любое предложение?

Теги:
for-loop
in-operator

2 ответа

0
Лучший ответ

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

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

mysqli_query($this->conn, "SELECT * FROM 'tale_name' WHERE 'id' in (". implode(',', $id_array) .")");
  • 0
    Фантастика, это работает (у). Спасибо.
1

Функция 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 в этом запросе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню