2011-10-28 2 views
0

私は私のPHPアプリケーションで透過的なmysql_errorログインをしたいと思います。私はまだ、次のやった:透過的なmysql_errorロギング:mysql_error()を2回読むにはどうすればよいですか?

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()機能でmysql_error()を読んだときに、元の発信者はmysql_error()(それが空の文字列を返すため、それが「読み出し」ですので)にアクセスすることはできません。

どのように私は透明な方法でそれを行うことができます、つまり、mysql_error()は元のままですか?

+0

エラーを生成したのと同じストレージを使用するのはそれほど賢明ではないと思いませんか? –

+0

よくありますが、ほとんどのエラーは間違ったSQL文(表名の変更、列の変更、不正な文字列の処理など)から発生します。 – netmano

答えて

2

元のエラーを変数に割り当て、その変数を関数に渡します。一度取得して変数に格納することができれば、エラーを複製しようとする必要はありません。

+0

しかし、この方法では、元の呼び出し元コードを変更して、変数。しかし、うん、私は 'mysql_error()'を 'mysql_error_my()'と同じ方法で変更し、その中のグローバル変数を扱うことができます。 – netmano

0

これは、あなたが何をしようとして達成すべきである:あなたのmysql_query_log機能で

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; 
} 

は、あなたが直接変数にエラーを格納します。

+0

いいえ、元のコードを変更せずに、mysql_query()をmysql_query_log()に変更します。また、mysql_query()やdie(mysql_error())を使っている元のコードではmysql_query()やdie(mysql_error())に変更した場合、mysql_error私は 'mysql_query_log_error()'でそれを読みました。 – netmano

関連する問題