Php 透明mysql\u错误日志:如何读取mysql\u error()两次?
我想在我的php应用程序中记录一个透明的mysql\u错误。我已经完成了以下工作:Php 透明mysql\u错误日志:如何读取mysql\u error()两次?,php,mysql,Php,Mysql,我想在我的php应用程序中记录一个透明的mysql\u错误。我已经完成了以下工作: 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); $
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\u query\u log\u error()
函数中读取mysql\u error()
时,原始调用者无法访问mysql\u error()
(因为它返回一个空字符串,所以它是“read out”)
如何以透明的方式执行此操作,我的意思是,
mysql\u error()
将保持不变?将原始错误分配给一个变量,然后将该变量传递给函数。当您可以获取一次错误并将其存储在变量中时,无需尝试复制错误。这将完成您尝试执行的操作:
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函数中,您将直接将错误存储在一个变量中。您不认为使用刚刚产生错误的同一个存储是不明智的吗?是的,但大多数错误来自错误的SQL语句(表名更改、列更改、字符串处理不正确等)。不,我想更改
mysql_query()
在我的应用程序中调用mysql\u query\u log()
而不更改原始代码。在原始代码中的一些情况下,他们使用mysql\u query()或die(mysql\u error())
,但如果我将其更改为mysql\u query\u log()或die(mysql\u error())
,mysql\u error()将返回空字符串,因为我已经在mysql\u query\u log\u error()
中读取了它,但这样,我必须更改原始调用方代码,从变量中获取错误消息。但是,是的,我可以用同样的方法将mysql\u error()
更改为mysql\u error\u my()
,并在其中处理一个全局变量。