Прозорі реєстрації mysql_error: Як я можу прочитати mysql_error () двічі?

Я хочу зробити прозорий вхід у mysql_error у моєму додатку php. Я ще зробив наступне:

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() залишиться недоторканим?

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_error() поверне порожню рядок, тому що я прочитав його в mysql_query_log_error()
додано Автор netmano, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php