Я хочу создать 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... Любое предложение?
Вы можете использовать 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
в этом запросе.