W3docs

errno

Функция mysqli_errno() в PHP возвращает числовой код ошибки для последней операции MySQLi. Узнайте, как её использовать.

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

Что делает mysqli_errno()

mysqli_errno() — встроенная функция PHP, которая возвращает код ошибки от последней функции MySQLi, выполненной на данном соединении. Это программный аналог сообщения на человеческом языке: там где mysqli_error() возвращает предложение вроде «Table 'db.my_table' doesn't exist», функция mysqli_errno() возвращает целое число (в данном случае 1146), с которым можно сравнивать в коде.

Синтаксис и возвращаемое значение

mysqli_errno(mysqli $mysqli): int
  • Параметр$mysqli: соединение, возвращённое функцией mysqli_connect() (процедурный стиль) или new mysqli(...) (объектно-ориентированный стиль).
  • Возвращаемое значение — код ошибки последнего вызова на данном соединении, либо 0, если ошибки не было. Всегда проверяйте возвращаемое значение, а не предполагайте наличие ошибки.

Зачем число? Числовые коды стабильны и удобны для ветвления. Текст сообщения об ошибке может меняться в разных версиях MySQL или при смене локали, тогда как код (например, 1062 для дублирующегося ключа) остаётся прежним — именно коды следует использовать в логике if/switch.

Использование mysqli_errno() (процедурный стиль)

Функция принимает единственный аргумент — действительное соединение MySQLi. Вот типичный шаблон использования:

Как использовать функцию mysqli_errno()?

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

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

$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);

if (!$result) {
    $error_code = mysqli_errno($mysqli);
    echo "Failed to execute query. Error code: " . $error_code;
    exit();
}

mysqli_close($mysqli);
?>

Здесь мы сначала проверяем успешность соединения, затем выполняем запрос с помощью mysqli_query(). Если запрос завершился неудачей (!$result), функция mysqli_errno($mysqli) возвращает числовой код, который можно записать в журнал и завершить выполнение.

Совместное использование errno и mysqli_error()

На практике почти всегда нужны и код (для ветвления), и сообщение (для журналирования или отображения). Используйте mysqli_errno() совместно с mysqli_error():

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

$result = mysqli_query($mysqli, "SELECT * FROM missing_table");

if (!$result) {
    $code    = mysqli_errno($mysqli);   // e.g. 1146
    $message = mysqli_error($mysqli);   // e.g. "Table 'database.missing_table' doesn't exist"

    // Branch on the stable numeric code, not the message text.
    if ($code === 1146) {
        echo "The table is missing. ";
    }
    echo "[$code] $message";
}

mysqli_close($mysqli);
?>

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

Если соединение создаётся с помощью new mysqli(...), обращайтесь к $mysqli->errno как к свойству (и к $mysqli->error для сообщения) вместо процедурной функции:

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

if (!$mysqli->query("SELECT * FROM missing_table")) {
    echo "Error " . $mysqli->errno . ": " . $mysqli->error;
}

$mysqli->close();
?>

Оба стиля возвращают один и тот же код — выбирайте тот, который соответствует остальной части вашей кодовой базы. Обзор расширения см. в разделе PHP MySQLi.

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

Несколько кодов, которые часто встречаются при обработке ошибок MySQLi:

КодЗначение
1045Доступ запрещён для пользователя (неверное имя пользователя или пароль)
1049Неизвестная база данных
1062Дублирующаяся запись для уникального или первичного ключа
1146Таблица не существует
1264Значение вне допустимого диапазона для столбца
1452Нарушение ограничения внешнего ключа

Полный список см. в официальном справочнике ошибок сервера MySQL.

Расширенное использование

Функцию mysqli_errno() можно применять и в более сложных сценариях. При работе с несколькими соединениями необходимо передавать конкретный объект MySQLi в функцию, чтобы получить код ошибки для данного соединения. Пример:

Расширенное использование PHP mysqli_errno()

<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");

if (!$mysqli1 || !$mysqli2) {
    die("One or more connections failed.");
}

$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);

if (!$result1) {
    $error_code = mysqli_errno($mysqli1);
    echo "Failed to execute query on connection 1. Error code: " . $error_code;
    exit();
}

if (!$result2) {
    $error_code = mysqli_errno($mysqli2);
    echo "Failed to execute query on connection 2. Error code: " . $error_code;
    exit();
}

mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>

В этом примере создаются два объекта MySQLi, подключающихся к двум разным базам данных MySQL. Затем один и тот же запрос выполняется через каждое соединение, а результат сохраняется в переменной. Наличие ошибки проверяется условием !$result. При возникновении ошибки вызывается mysqli_errno() для соответствующего объекта MySQLi, чтобы получить код ошибки конкретного соединения. После этого код ошибки выводится и скрипт завершается.

Примечание: mysqli_errno() сообщает об ошибке одного конкретного соединения. При нескольких открытых соединениях код привязан к тому объекту соединения, который вы передаёте — поэтому всегда передавайте нужный.

Связанные функции

  • mysqli_connect_errno() — код ошибки для неудачной попытки подключения (когда само соединение не удалось установить).
  • mysqli_connect_error() — сообщение для неудачной попытки подключения.
  • error_get_last() — последняя ошибка PHP (не специфичная для MySQLi).

Заключение

mysqli_errno() возвращает числовой код ошибки для последней операции на соединении MySQLi, либо 0, если ошибки не было. Используйте её совместно с mysqli_error() для получения сообщения, ветвьтесь по стабильному числовому коду и передавайте правильный объект соединения при наличии нескольких открытых — это основа надёжной обработки ошибок MySQLi.

Практика

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