Обработка ошибок для запросов MySQL - PullRequest
0 голосов
/ 13 сентября 2011

Вместо отправки запросов в PHP * функция 1001 * в настоящее время я отправляю свои запросы в пользовательскую оболочку sql_query (), которая, помимо прочего, выполняет часть «mysql_query».

Проблема с этой настройкой заключается в том, что при возникновении ошибки SQL файл и номер строки находятся там, где расположена функция sql_query (), а не там, где находится фактический запрос SQL.

есть ли способ заставить PHP сообщать файл и номер белья, откуда вызывается sql_query (), а не где функция mysql_query() на самом деле?

Ответы [ 4 ]

4 голосов
/ 13 сентября 2011

debug_backtrace

И множество полезных примеров для вашей проблемы.Одно из этогоУдивительно, но никто не описал одно из лучших применений этого: сброс переменной и отображение местоположения.При отладке, особенно большой и незнакомой системы, очень сложно вспомнить, где я добавил эти дампы var.Кроме того, таким образом существует разделитель между несколькими вызовами дампа.

<code><?php

function dump( $var ) {
     $result = var_export( $var, true );
     $loc = whereCalled();
     return "\n<pre>Dump: $loc\n$result
";} функция whereCalled ($ level = 1) {$ trace = debug_backtrace (); $ file = $ trace [$ level] ['file']; $ line = $ trace [$ level] [' line ']; $ object = $ trace [$ level] [' object ']; if (is_object ($ object)) {$ object = get_class ($ object);} return "Где вызвано: строка $ line из $ object \ n (в $ file)";}?>
0 голосов
/ 13 сентября 2011

Можете ли вы передать эту информацию оболочке, используя __FILE__ and __LINE__ константы.

0 голосов
/ 13 сентября 2011

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

mysql_errno и mysql_error и в случае возникновения каких-либо ошибок вызовите исключение.

0 голосов
/ 13 сентября 2011

Вам нужна трассировка стека.Обычно это происходит в контексте ошибки, в противном случае вы можете использовать библиотеки, такие как xdebug , чтобы получить одну.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...