(PHP 5, PHP 7, PHP 8)
mysqli::query -- mysqli_query — Выполняет запрос к базе данных
Объектно-ориентированный стиль
$query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|boolПроцедурный стиль
$mysql, string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool
Выполняет запрос 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. Это сообщение об ошибке означаетотказ сервера.
mysqlqueryТекст запроса.
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");
/* Запросы SELECT, возвращают набор результатов */
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
printf("Запрос SELECT вернул %d строк.\n", $result->num_rows);
/* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
$result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
/* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
с сервером, пока не закроем набор результатов. Все подобные вызовы
будут вызывать ошибку 'out of sync' */
$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");
/* Запросы SELECT, возвращают набор результатов */
$result = mysqli_query($link, "SELECT Name FROM City LIMIT 10");
printf("Запрос SELECT вернул %d строк.\n", mysqli_num_rows($result));
/* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
$result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT);
/* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
с сервером, пока не закроем набор результатов. Все подобные вызовы
будут вызывать ошибку 'out of sync' */
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...