透明的mysql_error日志记录:如何读取mysql_error()两次?

时间:2011-10-28 09:56:26

标签: php mysql

我想在我的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()将保持不变?

2 个答案:

答案 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函数中,您将直接将错误存储在变量中。