mysqli::query
mysqli_query
(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
.
Примеры
Пример #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
Смотрите также
- mysqli_real_query() - Выполнение SQL запроса
- mysqli_multi_query() - Выполняет запрос к базе данных
- mysqli_free_result() - Освобождает память, занятую результатами запроса