(PHP 8 >= 8.2.0)
mysqli::execute_query -- mysqli_execute_query — Подготавливает, связывает параметры и выполняет SQL-запрос
Объектно-ориентированный стиль
Процедурный стиль
Подготавливает SQL-запрос, связывает параметры и выполняет его. Метод mysqli::execute_query() является сокращением для mysqli::prepare(), mysqli_stmt::bind_param(), mysqli_stmt::execute() и mysqli_stmt::get_result().
У шаблона запроса может быть ноль или более маркеров параметров со знаком вопроса (?
),
которые также называются заполнителями.
Значения параметров должны быть представлены в виде массива (array),
переданного в параметр params
.
Подготовленный запрос создаётся под капотом, но он никогда не выводится за пределы функции. Невозможно получить доступ к свойствам запроса, как это можно сделать с объектом mysqli_stmt. Из-за этого ограничения информация о состоянии копируется в объект mysqli и доступна с помощью его методов, например, mysqli_affected_rows() или mysqli_error().
Замечание:
В случае, когда функции mysqli_execute_query() передаётся запрос, длина которого превышает
max_allowed_packet
сервера, возвращаемые коды ошибок различаются в зависимости от операционной системы. Поведение следующее:
В Linux возвращается код ошибки 1153. Сообщение об ошибке означает, что получен пакет размером более
max_allowed_packet
(got a packet bigger than).max_allowed_packet
bytesВ Windows возвращается код ошибки 2006. Сообщение об ошибке означает, что сервер недоступен (
server has gone away).
mysql
Только для процедурного стиля: объект mysqli, полученный с помощью mysqli_connect() или mysqli_init().
query
Запрос в виде строки. Он должен состоять из одного SQL-запроса.
SQL-запрос может содержать ноль или более маркеров параметров,
представленных символами вопросительного знака (?
) в соответствующих позициях.
Замечание:
Эти метки можно встраивать только в определённые места в выражении. Например, они разрешены в списке
VALUES()
выраженияINSERT
(чтобы задать значения столбцов для строки), или в операциях сравнения предложенияWHERE
для задания сравниваемого значения. Однако они не разрешены в качестве идентификаторов (таких как имена таблиц или столбцов).
params
Необязательный список в виде массива (array) с таким количеством элементов, сколько связанных параметров в выполняемом SQL-запросе. Каждое значение рассматривается как строка (string).
Возвращает false
в случае возникновения ошибки.
Для успешных запросов, создающих набор результатов, таких как SELECT, SHOW, DESCRIBE
или EXPLAIN
, возвращает объект mysqli_result.
Для других успешных запросов возвращается true
.
Пример #1 Пример использования mysqli::execute_query()
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = $mysqli->execute_query($query, ['DEU']);
foreach ($result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}
Процедурный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = mysqli_execute_query($link, $query, ['DEU']);
foreach ($result as $row) {
printf("%s (%s)\n", $row["Name"], $row["District"]);
}
Результатом выполнения данных примеров будет что-то подобное:
Aachen (Nordrhein-Westfalen) Augsburg (Baijeri) Bergisch Gladbach (Nordrhein-Westfalen) Berlin (Berliini) Bielefeld (Nordrhein-Westfalen)