W3docs

info

В этой статье рассматривается функция mysqli_info() в PHP, которая возвращает информацию о последнем выполненном запросе.

В этой статье рассматривается функция mysqli_info() в PHP, которая возвращает удобочитаемую строку, описывающую результат последнего выполненного запроса. Вы узнаете, что возвращает функция, какие операторы порождают вывод, как вызывать её в процедурном и объектно-ориентированном стилях MySQLi, а также чем она отличается от связанных функций, таких как mysqli_affected_rows().

Что возвращает mysqli_info()

mysqli_info() — это встроенная функция PHP, которая возвращает форматированную строку состояния для последнего запроса, выполненного на данном соединении. Строка совпадает с тем текстом, который сервер MySQL сообщает для данного оператора — она предназначена для людей, а не для программной обработки.

Функция возвращает строку только для операторов, изменяющих или загружающих несколько строк. Для других запросов (обычный SELECT, CREATE TABLE и т. д.) она возвращает пустую строку или NULL. Операторы, для которых возвращается строка:

ОператорПример строки вывода
INSERT INTO ... SELECT ...Records: 3 Duplicates: 0 Warnings: 0
INSERT INTO ... VALUES (...),(...)Records: 2 Duplicates: 0 Warnings: 0
LOAD DATA INFILE ...Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
ALTER TABLE ...Records: 3 Duplicates: 0 Warnings: 0
UPDATE ...Rows matched: 40 Changed: 40 Warnings: 0

Поскольку формат строки нестабилен и может различаться в зависимости от типа оператора или версии MySQL, используйте её только для отображения. Чтобы программно получить отдельные числа, используйте специальные функции — см. mysqli_affected_rows() и mysqli_warning_count().

Синтаксис

mysqli_info() принимает ссылку на соединение, возвращаемую функцией mysqli_connect():

// Procedural style
string mysqli_info(mysqli $link)

// Object-oriented style
string $mysqli->info

В объектно-ориентированном API info является свойством, а не методом — обратите внимание на отсутствие скобок.

Как использовать mysqli_info()

Вызовите mysqli_info() на действующем соединении MySQLi сразу после выполнения запроса с помощью mysqli_query(). Выполните проверку статуса до отправки следующего запроса, так как каждый новый запрос перезаписывает предыдущий статус.

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (!$mysqli) {
    die("Connection failed: " . mysqli_connect_error());
}

// A multi-row INSERT produces a status string
$sql = "INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')";

if (mysqli_query($mysqli, $sql)) {
    echo mysqli_info($mysqli);
} else {
    echo "Query failed: " . mysqli_error($mysqli);
}

mysqli_close($mysqli);
?>

Для трёхстрочной вставки выше скрипт выведет:

Records: 3  Duplicates: 0  Warnings: 0

Здесь Records — количество строк, обработанных оператором, Duplicates — количество строк, конфликтующих с уникальным ключом, а Warnings — количество некритических предупреждений, возникших при выполнении.

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

Та же логика с использованием объектно-ориентированного API MySQLi обращается к свойству info:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

$mysqli->query("INSERT INTO users (name) VALUES ('Ann'), ('Bob'), ('Cara')");

echo $mysqli->info; // Records: 3  Duplicates: 0  Warnings: 0

$mysqli->close();
?>

mysqli_info() и mysqli_affected_rows()

Эти функции легко перепутать:

  • mysqli_info() возвращает форматированную строку для отображения и работает только для типов операторов, перечисленных выше.
  • mysqli_affected_rows() возвращает целочисленное количество строк, изменённых операторами INSERT, UPDATE, DELETE или REPLACE — используйте её, когда вам нужно число в коде.

Если вам нужно число, никогда не разбирайте строку mysqli_info(); вызывайте mysqli_affected_rows() напрямую.

Распространённые ошибки

  • Обычный SELECT ничего не возвращает. mysqli_info() пуста для SELECT; чтобы подсчитать возвращённые строки, используйте mysqli_num_rows() на результирующем наборе.
  • Статус сбрасывается при следующем запросе. Читайте mysqli_info() сразу после интересующего вас запроса.
  • Не разбирайте строку. Её формулировка меняется в зависимости от типа оператора и версии сервера; для логики используйте специальные функции подсчёта строк и предупреждений.

Заключение

mysqli_info() — это быстрый способ получить удобочитаемую сводку о результатах последнего запроса: сколько записей было обработано, сколько оказались дубликатами и сколько возникло предупреждений. Используйте её для логирования и отладки, а для получения числовых значений обращайтесь к mysqli_affected_rows() или mysqli_warning_count(). Подробнее о выполнении запросов см. в обзоре PHP MySQLi.

Практика

Практика
Что возвращает функция PHP mysqli_info()?
Что возвращает функция PHP mysqli_info()?
Was this page helpful?