2011-10-28 28 views
0

我想在我的php應用程序中做一個透明的mysql_error日誌記錄。我已經做了以下尚未:透明的mysql_error日誌記錄:我如何讀取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_query_log_error()函數read mysql_error(),原調用無法訪問mysql_error()(因爲它返回一個空字符串,那麼它的「讀出」)。

我該如何以透明的方式做到這一點,我的意思是,mysql_error()將保持不變?

+0

你不覺得使用相同的存儲只是產生一個錯誤不是太明智? –

+0

是的,但大部分的錯誤來自錯誤的SQL語句(表名改變,列更改,字符串處理不正確等) – netmano

回答

2

您將原始錯誤分配給一個變量,然後將該變量傳遞給函數。沒有必要嘗試複製錯誤,當你得到它並將它存儲在一個變量中。

+0

但是這樣,我必須更改原始調用者代碼,以獲取錯誤消息變量。但是,是的,我可以用同樣的方法將'mysql_error()'更改爲'mysql_error_my()'並在其中處理一個全局變量。 – netmano

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功能,您將直接錯誤存儲在一個變量。

+0

不,我想在我的應用程序中將'mysql_query()'調用更改爲'mysql_query_log()',而無需更改原始代碼。並且在他們使用'mysql_query()或者死(mysql_error())'的原始代碼中有一些情況,但是如果我將其更改爲'mysql_query_log()或死(mysql_error())',mysql_error()將返回空字符串,因爲我在'mysql_query_log_error()'中讀過它 – netmano