mysqli::query

mysqli_query

(PHP 5, PHP 7)

mysqli::query -- mysqli_query Выполняет запрос к базе данных

Описание

Объектно-ориентированный стиль

mysqli::query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

Процедурный стиль

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

Выполняет запрос 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

Смотрите также