2009-12-17 3 views
0

Я разрабатываю веб-приложение с PHP и MySQL. На днях я внес некоторые изменения в базу данных и адаптировал одну страницу к новому макету таблицы, но не к другой странице. Я не тестировал достаточно хорошо, поэтому сайт вышел в сеть с ошибкой, остающейся на другой странице. Это была простая ошибка MySQL, и как только один из моих сотрудников заметил ее, это было простое исправление.PHP: ошибка ошибки MySQL?

Теперь, когда это произошло, я хотел бы знать, как я могу поймать другие ошибки MySQL. Я думаю о какой-то системе уведомлений, которая отправит мне электронное письмо, когда сбой mysql_query().

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

Есть ли способ вставить крючок, чтобы PHP автоматически запускал функцию при возникновении ошибки? Или мне нужно пройти мой код и добавить эту функциональность ко всем местам, где я использую mysql_query()?

Если у вас есть какие-либо рекомендации о том, как предотвратить подобное в будущем? Если это так, я, вероятно, создам класс для абстрактных операций SQL. Я знаю, что я должен был делать это все время ... Но я организовал свои наборы функций в разные файлы include, так что, по крайней мере, я делаю все правильно. Правильно?

ответ

2

Вы можете использовать функцию-оболочку, как это:

function mysql_query_wrapper($query, $link=null) 
{ 
    if (is_null($link)) { 
     $result = myql_query($query); 
    } else { 
     $result = myql_query($query, $link); 
    } 
    if (mysql_error($result)) { 
     // error occurred 
    } 
    return $result; 
} 

Тогда вам просто нужно заменить каждый mysql_query вызов с mysql_query_wrapper.

+0

Спасибо, и извините @ Пекка, мне жаль, что я не могу подтвердить оба ваших ответа как принято. Я думаю, вы оба дали мне исчерпывающий ответ и решение, которое я искал! – Ricket

2

Вы можете использовать пользовательские функции для обработки ошибок с помощью set_error_handler().

Однако mysql_queryне вызывает ошибку, но возвращает false. Ошибки появляются только после попытки работы с результатами. В этом случае может быть лучше определить пользовательскую функцию-обертку, которая вызывает mysql_query() и выводит возможные ошибки с использованием mysql_error(). Таким образом, вы можете немедленно остановить приложение при ошибке, если это необходимо.

+0

На самом деле, вместо того, чтобы выводить ошибку, хороший способ справиться со всем состоит в том, чтобы: a) иметь одну точку выполнения запроса; b) иметь набор set_error_handler() для обработки остальных случаев. –

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