Php 透明mysql\u错误日志:如何读取mysql\u error()两次?

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); $

我想在我的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);
    $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()
,并在其中处理一个全局变量。