我想在我的php应用程序中进行透明的mysql_error日志记录。我还做了以下事情:
function mysql_query_log_error($query) {
$debug_trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$caller = $debug_trace[1];
$file = substr($caller[file], strrpos($caller[file], '/')+1);
$line = $caller[line];
$error = mysql_error();
$error_query = "INSERT INTO Common.ERRsql SET "
."errQuery = '".mysql_real_escape_string($query)."', "
."errText = '".mysql_real_escape_string($error)."', "
."errDate = NOW(), "
."errFile = '".mysql_real_escape_string($file)."', "
."errLine = '".mysql_real_escape_string($line)."' ";
mysql_query($error_query);
}
function mysql_query_log($query) {
$result = mysql_query($query) or mysql_query_log_error($query);
return $result;
}
但是当我在mysql_error()
函数中读取mysql_query_log_error()
时,原始调用者无法访问mysql_error()
(因为它返回一个空字符串,因此它是“读出”)。
我怎么能以透明的方式做到这一点,我的意思是mysql_error()
将保持不变?
答案 0 :(得分:2)
将原始错误分配给变量,然后将该变量传递给函数。当您可以获取错误并将其存储在变量中时,无需尝试复制错误。
答案 1 :(得分:0)
这应该完成你要做的事情:
function mysql_query_log_error($query, $error) {
$debug_trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$caller = $debug_trace[1];
$file = substr($caller[file], strrpos($caller[file], '/')+1);
$line = $caller[line];
$error_query = "INSERT INTO Common.ERRsql SET "
."errQuery = '".mysql_real_escape_string($query)."', "
."errText = '".mysql_real_escape_string($error)."', "
."errDate = NOW(), "
."errFile = '".mysql_real_escape_string($file)."', "
."errLine = '".mysql_real_escape_string($line)."' ";
mysql_query($error_query);
}
function mysql_query_log($query) {
$result = mysql_query($query) or mysql_query_log_error($query, mysql_error());
return $result;
}
在mysql_query_log函数中,您将直接将错误存储在变量中。