(PHP 5, PHP 7, PHP 8)
mysqli::query -- mysqli_query — Выполняет запрос к базе данных
Объектно-ориентированный стиль
Процедурный стиль
Выполняет запрос query
к базе данных.
Вместо составления строки запроса с включением переменных значений необходимо подготавливать запросы. Либо строки запроса должны быть экранированы функцией mysqli_real_escape_string() и правильно отформатированы.
Для не DML-запросов (не INSERT, UPDATE или DELETE), эта функция равносильна вызову функции mysqli_real_query(), а затем mysqli_use_result() или mysqli_store_result().
Замечание:
Если длина передаваемого в функцию mysqli_query() выражения больше значения системной переменной
max_allowed_packet
сервера, будет сгенерирована ошибка. MySQL-драйвер (mysqlnd
) и клиентская библиотека MySQL (libmysqlclient
) выбрасывают разные коды ошибок. Поведение функции будет следующим:
mysqlnd
на платформе Linux возвращает код ошибки 1153. Сообщение об ошибке означаетразмер пакета превышает.max_allowed_packet
байт
mysqlnd
на платформе Windows возвращает код ошибки 2006. Это сообщение об ошибке означаетотказ сервера.
libmysqlclient
на всех платформах возвращает код ошибки 2006. Это сообщение об ошибке означаетотказ сервера.
mysql
Только для процедурного стиля: объект mysqli, который вернула функция mysqli_connect() или функция mysqli_init().
query
Текст запроса.
result_mode
Режим результата может быть одной из 3 констант, указывающих, как результат будет возвращён сервером MySQL.
MYSQLI_STORE_RESULT
(по умолчанию) — возвращает объект mysqli_result с буферизованным набором результатов.
MYSQLI_USE_RESULT
— возвращает объект mysqli_result с небуферизованным набором результатов. Пока есть отложенные записи, ожидающие выборки, линия соединения будет занята и все последующие вызовы будут возвращать ошибку Commands out of sync
. Чтобы избежать ошибки, все записи должны быть получены с сервера или набор результатов должен быть отброшен путём вызова mysqli_free_result().
MYSQLI_ASYNC
(доступно с mysqlnd) — запрос выполняется асинхронно, набор результатов сразу не возвращается. Затем вызывают функцию mysqli_poll() для получения результатов по этим запросам. Можно использовать в сочетании с константой MYSQLI_STORE_RESULT
или MYSQLI_USE_RESULT
.
Возвращает false
в случае возникновения ошибки. В случае успешного выполнения запросов, которые создают набор результатов, таких как SELECT, SHOW, DESCRIBE
или EXPLAIN
, функция mysqli_query() вернёт объект mysqli_result. Для остальных успешных запросов mysqli_query() вернёт true
.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR
) и запрошенная операция не удалась, выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT
, вместо этого будет выброшено исключение mysqli_sql_exception.
Пример #1 Пример использования mysqli::query()
Объектно-ориентированный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
printf("Таблица myCity создана.\n");
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
printf("Запрос SELECT вернул %d строк.\n", $result->num_rows);
$result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
$mysqli->query("SET @a:='this will not work'");
Процедурный стиль
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
printf("Таблица myCity создана.\n");
$result = mysqli_query($link, "SELECT Name FROM City LIMIT 10");
printf("Запрос SELECT вернул %d строк.\n", mysqli_num_rows($result));
$result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT);
mysqli_query($link, "SET @a:='this will not work'");
Результат выполнения приведённых примеров:
Таблица myCity создана. Запрос SELECT вернул 10 строк. Fatal error: Uncaught mysqli_sql_exception: Commands out of sync; you can't run this command now in...