透過的なmysql_errorロギング:mysql_error()を2回読むにはどうすればいいですか?

私は私の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_query_log_error()関数で mysql_error()を読むと、元の呼び出し元は mysql_error()にアクセスできなくなります。空の文字列なので、 "読み込まれます")。

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

0
ちょうどエラーを生成した同じストレージを使用することはそれほど賢明ではないと思いませんか?
追加された 著者 Your Common Sense,
よくはいですが、間違ったSQL文(テーブル名が変更されたり、カラムが変更されたり、不正な文字列が処理されたりするなど)
追加された 著者 netmano,

2 答え

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

2
追加された
しかし、この方法では、元の呼び出し元コードを変更して、変数からエラーメッセージを取得する必要があります。しかし、まあいいのですが、 mysql_error()を同じ方法で mysql_error_my()に変更し、その中のグローバル変数を扱うことができます。
追加された 著者 netmano,

これはあなたがしようとしていることを達成するはずです:

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()またはdie(mysql_error())を使用しますが、 mysql_query_log()またはdie(mysql_error()) mysql_query_log_error()で読んだので、mysql_error()は空の文字列を返します。
追加された 著者 netmano,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com