Php sql connection error

Обработка ошибок в соединении и запросах к базе данных в 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».

Читайте также:  Vs code getter setter php

Обратите внимание, что все функции обработки ошибок в этой статье (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 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’ );

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 не может подключиться к БД?

FanatPHP

ЗЫ. На боевом сервере ошибки на экран выводить конечно не стоит, а их надо писать в лог (собственно, именно поэтому все эти 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.

Источник

Оцените статью