- Обработка ошибок в соединении и запросах к базе данных в PHP (mysqli_connect_error, mysqli_connect_errno, mysqli_error, mysqli_errno)
- Ошибка соединения с базой данных
- Ошибка запроса к базе
- mysqli_connect_error
- Parameters
- Return Values
- Examples
- See Also
- User Contributed Notes
- mysqli_connect_error
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- Почему php не может подключиться к БД?
Обработка ошибок в соединении и запросах к базе данных в PHP (mysqli_connect_error, mysqli_connect_errno, mysqli_error, mysqli_errno)
Правильная обработка ошибок позволяет сделать стабильное приложение, которое не будет завершаться неожиданно. В случае возникновения непредвиденной ситуации программа должна выдавать вменяемый ответ, почему она не хочет исполнится. И создание правильного механизма обработки ошибок — это задача программиста.
В этой статье рассмотрим два вида ошибок, которые могут возникнуть при программировании взаимодействия с базой данных. Первый тип — это ошибка подключения к базе данных. Второй тип — это ошибка выполнения запроса к базе данных. Для обработки этих ошибок будем использовать специальные функции для работы с базой.
Ошибка соединения с базой данных
'; echo 'Код ошибки: ' . mysqli_connect_errno(); >else < // соединение было установлено успешно // здесь можно делать запрос к базе, // потому что соединение успешно установлено >?>
В этом примере можно заметить функцию mysqli_connect_error. Она выводит текстовое описание ошибки подключения (на английском языке). В отличии от неё функция mysqli_connect_errno выводит числовой код ошибки, к примеру «1045».
Ошибка запроса к базе
Теперь попробуем доработать пример из предыдущего параграфа и добавить запрос к базе данных. Не будем вдаваться в детали, что будет записано в тексте SQL запроса, просто предположим, что он может завершиться ошибкой. К примеру, из-за неожиданного отключения сервера с базой данных от сети. В примере добавим проверку на наличие ошибок при выполнении запроса:
'; echo 'Код ошибки: ' . mysqli_connect_errno(); >else< // подключение успешно установлено // текст SQL запроса, который будет передан базе $query = 'SELECT * FROM `USERS`'; // выполняем запрос к базе данных $result = mysqli_query($connection, $query); if(!$result)< // запрос завершился ошибкой echo 'Ошибка запроса: ' . mysqli_error($connection) . '
'; echo 'Код ошибки: ' . mysqli_errno($connection); >else< // запрос успешно выполнился while($row = $result->fetch_assoc()) < // обрабатываем полученные данные >> // закрываем соединение с базой mysqli_close($connection); > ?>
В этом примере есть две функции, которые работают с ошибками базы. Функция mysqli_error возвращает описание ошибки запроса (на английском языке), а функция mysqli_errno возвращает числовой код ошибки, к примеру, «1193».
Обратите внимание, что все функции обработки ошибок в этой статье (mysqli_connect_error, mysqli_connect_errno, mysqli_error, mysqli_errno) возвращают информацию только о последней ошибке. Но ошибок может быть несколько.
mysqli_connect_error
Returns the error message from the last connection attempt.
Parameters
This function has no parameters.
Return Values
A string that describes the error. null is returned if no error occurred.
Examples
Example #1 $mysqli->connect_error example
mysqli_report ( MYSQLI_REPORT_OFF );
/* @ is used to suppress warnings */
$mysqli = @new mysqli ( ‘localhost’ , ‘fake_user’ , ‘wrong_password’ , ‘does_not_exist’ );
if ( $mysqli -> connect_error ) /* Use your preferred error logging method here */
error_log ( ‘Connection error: ‘ . $mysqli -> connect_error );
>
mysqli_report ( MYSQLI_REPORT_OFF );
/* @ is used to suppress warnings */
$link = @ mysqli_connect ( ‘localhost’ , ‘fake_user’ , ‘wrong_password’ , ‘does_not_exist’ );
if (! $link ) /* Use your preferred error logging method here */
error_log ( ‘Connection error: ‘ . mysqli_connect_error ());
>
See Also
- mysqli_connect() — Alias of mysqli::__construct
- mysqli_connect_errno() — Returns the error code from last connect call
- mysqli_errno() — Returns the error code for the most recent function call
- mysqli_error() — Returns a string description of the last error
- mysqli_sqlstate() — Returns the SQLSTATE error from previous MySQL operation
User Contributed Notes
mysqli_connect_error
Возвращает последнее сообщение об ошибке после вызова mysqli_connect() .
Возвращаемые значения
Сообщение об ошибке. NULL , если ошибка отсутствует.
Примеры
Пример #1 Пример использования $mysqli->connect_error
$mysqli = @new mysqli ( ‘localhost’ , ‘fake_user’ , ‘my_password’ , ‘my_db’ );
?php
// Работает в версиях PHP 5.2.9 и 5.3.0.
if ( $mysqli -> connect_error ) die( ‘Connect Error: ‘ . $mysqli -> connect_error );
>
?>
$link = @ mysqli_connect ( ‘localhost’ , ‘fake_user’ , ‘my_password’ , ‘my_db’ );
?php
if (! $link ) die( ‘Connect Error: ‘ . mysqli_connect_error ());
>
?>
Результат выполнения данных примеров:
Connect Error: Access denied for user 'fake_user'@'localhost' (using password: YES)
Примечания
mysqli->connect_error() работает в версиях PHP 5.2.9 и 5.3.0. Для совместимости с более ранними версиями следует использовать mysqli_connect_error()
Смотрите также
- mysqli_connect() — Псевдоним mysqli::__construct
- mysqli_connect_errno() — Возвращает код ошибки последней попытки соединения
- mysqli_errno() — Возвращает код ошибки последнего вызова функции
- mysqli_error() — Возвращает строку с описанием последней ошибки
- mysqli_sqlstate() — Возвращает код состояния SQLSTATE последней MySQL операции
Почему php не может подключиться к БД?
ЗЫ. На боевом сервере ошибки на экран выводить конечно не стоит, а их надо писать в лог (собственно, именно поэтому все эти die — это ужас). И на боевом сервере display_errors надо отключать, а log_errors наоборот — подключать.
Если совсем не можешь найти, где у сервера висит лог ошибок, можешь задать свой собственный, с помощью функции ini_set(‘error_log’,’/путь/к/файлу’); . Но только размещать его надо разумеется в папке недоступной пользователям сайта
Если же говорить о конкретно этой проблеме, то это очень забавная ошибка, в которой смешалась куча старого карго культ кода, который и сам по себе использовать не стоит, и вдобавок он здесь написан неправильно.
Если разобраться, то код or die(«Ошибка1 » . mysqli_error($link)); очень смешной (это не к тебе претензия, никто не ожидает от тебя понимания таких тонкостей, которые не то что новички, а половина здешних «кураторов» не понимают).
Что тут происходит?
слово or die (которое на самом деле вообще нельзя никогда писать) пишут тогда, когда ожидают что в переменной $link будет значение false. Но если в $link будет false, то тогда её бессмысленно подставлять в mysqli_error. Именно поэтому для получения ошибки соединения в мускули есть отдельная специальная функция.
Но как я говорил выше, применять её не следует, как и or die.