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() - Освобождает память, занятую результатами запроса