2012-03-25 2 views
0

Что такое «Правильный» способ справиться с ошибками при работе с базой данных sql с php?Что такое правильный способ обработки mysql-ошибок с помощью php?

Что Im в настоящее время делает, выглядит так:

$connection = new mysqli('hostname', 'user', 'pass', 'database'); 

if ($connection->connect_errno) { 
    reportError("DB_CONNECTION_ERROR", $connection->connect_errno, $connection->connect_error); 
displayError("DB_CONNECTION_ERROR"); 
} 

$stmt = $connection->stmt_init(); 
$q = "query"; 

$stmt->prepare($q); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 

ReportError() является частью ошибки файл, который я написал обработку и регистрирует ошибку в базе данных

displayError() является частью одного и того же файл и сообщает странице, что отображать (в отличие от отображения фактической ошибки).

Тем не менее, я не уверен, как проверить другие ошибки, например, был ли отчет успешно подготовлен или был ли запрос успешным. Любые рекомендации оценены!

ответ

2

Разве вам не странно писать ошибки подключения к базе данных ... в базу данных?

Я также не вижу смысла иметь пользовательский дисплейError() функция. Это должна быть общая функция _503(), отправляющая соответствующий заголовок вместе с общими оправданиями.

Я не вижу смысла в создании функции logError(). PHP вполне способен самостоятельно регистрировать ошибки. trigger_error() служит мне лучше всего.

Я не уверен, как проверить наличие других ошибок, например, является ли заявление успешно подготовлен

Ах, это. Исключения.

+0

Ошибки хранения базы данных базы данных в базе данных бесполезны, но могут возникнуть другие ошибки (не связанные с подключением), и я чувствую, что они должны регистрироваться (если только вы не можете предложить лучший способ их хранения). Я знаю, что такое исключения и как их использовать, по крайней мере, в основном смысле, я просто не уверен, как проверить, не произошло ли это. –

+0

Регистрация в файле - это самое лучшее. И оператор 'catch' - это тот, который поможет вам узнать, было ли исключено исключение. –

+0

Если у вас есть шанс, вы можете указать мне пример кода или раздел руководства для этого? –

0

Mysqli должно исключать, если что-то пошло не так. См. mysqli_sql_exception для получения более подробной информации.

В коде клиента, вы можете обернуть свой код в Try/улове блоков:

try { 

} catch (Exception $e) { 

} 

Иногда бывают исключения, которые не могут быть решены в рамках попытки/поймать блок, например, сервер базы данных не работает, и сайт, который сильно зависит от базы данных, не сможет функционировать в любом случае.

Для этих очень важных проблем вы можете позволить исключению пузыриться вверх. Затем вы должны set an exception handler в начале вашего скрипта, чтобы поймать эти исключения, уведомить администратора и сделать некоторые записи, а затем отобразить страницу с ошибкой 500.

+0

Итак, как следует Я проверяю mysqli_sql_exception, чтобы увидеть, произошло ли это и соответствующим образом изменил поток моего кода. –

Смежные вопросы