MySQL查询的错误处理

时间:2011-09-13 12:18:40

标签: php mysql mysql-error-1064

我没有向PHP mysql_query()函数发送查询,而是将查询发送到自定义包装器sql_query(),其中包括“mysql_query”部分。

此设置的问题是,当出现SQL错误时,文件和行号是sql_query()函数所在的位置,而不是实际SQL查询所在的位置。

有没有办法让PHP报告调用sql_query()的文件和编号,而不是mysql_query()函数的实际位置?

4 个答案:

答案 0 :(得分:4)

debug_backtrace

还有许多有用的例子可以解决您的问题。其中之一。 令人惊讶的是,没有人描述过这个的最佳用法之一:转储变量并显示位置。在调试时,特别是一个庞大且不熟悉的系统,记住我添加那些var转储的地方是一件痛苦的事。此外,这种方式在多个转储调用之间存在分隔符。

<?php

function dump( $var ) {
     $result = var_export( $var, true );
     $loc = whereCalled();
     return "\n<pre>Dump: $loc\n$result</pre>";
 }

 function 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 "Where called: line $line of $object \n(in $file)";
 }
?>

答案 1 :(得分:0)

您需要堆栈跟踪。它通常位于错误上下文中,否则您可以使用xdebug之类的库来获取一个。

答案 2 :(得分:0)

是否可以使用__FILE__ and __LINE__常量将此信息传递给包装器。

答案 3 :(得分:-1)

您应该在sql_query()中添加一些错误处理。你可以查看这个功能:

mysql_errnomysql_error如果您有任何错误,则会引发异常。