Лучший способ обработки ошибок базы данныхPhp

Кемеровские программисты php общаются здесь
Anonymous
Лучший способ обработки ошибок базы данных

Сообщение Anonymous »

Мне просто интересно, как лучше всего обнаружить ошибки базы данных. Если произойдет ошибка, я хотел бы показать пользователям некоторый «извиняющий» контент и отправить электронное письмо в службу технической поддержки.

Теперь я поместил try-catch в файл настроек соединения и включил этот файл в другие функциональные файлы. Он работает неправильно.

Скажем, скрипт подключения к базе данных под названием db-connect.php.

Код: Выделить всё

try {
$db = new PDO('dsn', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $ex) {
echo ('An internal error happens. The technical staff has been informed to '.
'fix this. Sorry for any inconvenience.');
errorReport(/*title=*/"Database connection failed",
/*code=*/$ex->getCode(), /*message=*/$ex->getMessage(),
/*trace=*/$ex->getTraceAsString(), /*file=*/$ex->getFile(),
/*line=*/$ex->getLine());
}
Затем в другом файле a.php, который включает db-connect:

Код: Выделить всё

require_once("db-connect.php");
$stmt = $db->prepare("SELECT * FROM user WHERE username=:username");
$stmt->excute(array(':username' => $uname));
Теперь я вручную отключаю базу данных, но пользователь получал сообщение об ошибке, например

Код: Выделить всё

An internal error happens. The technical staff has been informed to fix this. Sorry for any inconvenience.
Notice: Undefined variable: db in a.php on line 26
Fatal error: Call to a member function prepare() on null in a.php on line 26
Я понимаю, что переменная db отсутствует, поскольку она не создана из-за ошибок соединения. но как я могу это улучшить? Любая помощь приветствуется.

Вернуться в «Php»