(PHP 5, PHP 7)
mysqli::query -- mysqli_query — Выполняет запрос к базе данных
Объектно-ориентированный стиль
Процедурный стиль
Выполняет запрос query
к базе данных.
Для не 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. Это сообщение об ошибке означает
отказ сервера.
link
Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()
query
Текст запроса.
Данные в тексте запроса должны быть правильно экранированы.
resultmode
Либо константа MYSQLI_USE_RESULT
, либо
MYSQLI_STORE_RESULT
в зависимости от требуемого
поведения функции. По умолчанию используется
MYSQLI_STORE_RESULT
.
При использовании MYSQLI_USE_RESULT
все последующие
вызовы этой функции будут возвращать ошибку
Commands out of sync до тех пор, пока не будет вызвана
функция mysqli_free_result()
С константой MYSQLI_ASYNC
(доступна при использовании
mysqlnd) возможно выполнять запросы асинхронно. В этом случае для получения
результатов каждого запроса необходимо использовать функцию
mysqli_poll().
Возвращает FALSE
в случае неудачи. В случае успешного выполнения запросов
SELECT, SHOW, DESCRIBE или
EXPLAIN mysqli_query() вернет объект
mysqli_result. Для остальных успешных запросов
mysqli_query() вернет TRUE
.
Версия | Описание |
---|---|
5.3.0 | Добавлена возможность выполнять асинхронные запросы. |
Пример #1 Пример использования mysqli::query()
Объектно-ориентированный стиль
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* проверка соединения */
if ($mysqli->connect_errno) {
printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
exit();
}
/* Создание таблицы не возвращает результирующего набора */
if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
printf("Таблица myCity успешно создана.\n");
}
/* Select запросы возвращают результирующий набор */
if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
printf("Select вернул %d строк.\n", $result->num_rows);
/* очищаем результирующий набор */
$result->close();
}
/* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
if ($result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT)) {
/* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
с сервером, пока не закроем результирующий набор. Все подобные вызовы
будут вызывать ошибку 'out of sync' */
if (!$mysqli->query("SET @a:='this will not work'")) {
printf("Ошибка: %s\n", $mysqli->error);
}
$result->close();
}
$mysqli->close();
?>
Процедурный стиль
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* проверка соединения */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
/* Создание таблицы не возвращает результирующего набора */
if (mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
printf("Таблица myCity успешно создана.\n");
}
/* Select запросы возвращают результирующий набор */
if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
printf("Select вернул %d строк.\n", mysqli_num_rows($result));
/* очищаем результирующий набор */
mysqli_free_result($result);
}
/* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
if ($result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT)) {
/* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
с сервером, пока не закроем результирующий набор. Все подобные вызовы
будут вызывать ошибку 'out of sync' */
if (!mysqli_query($link, "SET @a:='this will not work'")) {
printf("Ошибка: %s\n", mysqli_error($link));
}
mysqli_free_result($result);
}
mysqli_close($link);
?>
Результат выполнения данных примеров:
Таблица myCity успешно создана. Select вернул 10 строк. Ошибка: Commands out of sync; You can't run this command now