我没有向PHP mysql_query()
函数发送查询,而是将查询发送到自定义包装器sql_query(),其中包括“mysql_query”部分。
此设置的问题是,当出现SQL错误时,文件和行号是sql_query()函数所在的位置,而不是实际SQL查询所在的位置。
有没有办法让PHP报告调用sql_query()的文件和编号,而不是mysql_query()
函数的实际位置?
答案 0 :(得分:4)
还有许多有用的例子可以解决您的问题。其中之一。 令人惊讶的是,没有人描述过这个的最佳用法之一:转储变量并显示位置。在调试时,特别是一个庞大且不熟悉的系统,记住我添加那些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_errno和mysql_error如果您有任何错误,则会引发异常。