Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie MySQLI :: Get_Warnings und MySQLI :: ERRAGE_LIST, um eine stärkere Protokollanalyse durchzuführen

So verwenden Sie MySQLI :: Get_Warnings und MySQLI :: ERRAGE_LIST, um eine stärkere Protokollanalyse durchzuführen

gitbox 2025-05-28

1. Verstehen Sie Mysqli :: get_warnings und mySQLi :: errungen_list

1.1 Mysqli :: get_warnings ()

Diese Methode gibt ein MySQLI_WARNING -Objekt zurück, sodass die von der Datenbank zurückgegebene Warnungen durch die Durchführung von Warnungen ermöglicht werden können. Anwendbar auf SQL, das erfolgreich ausgeführt wird, aber Warnungen zurückgibt.

 $mysqli = new mysqli("localhost", "user", "pass", "database");
$mysqli->query("YOUR SQL HERE");

if ($warning = $mysqli->get_warnings()) {
    do {
        echo "Warning: " . $warning->message . PHP_EOL;
    } while ($warning->next());
}

1.2 Mysqli :: ERROR_LIST

Im Gegensatz dazu ist ERROR_LIST ein Array, das alle Fehlermeldungen (einschließlich Fehlercode und Meldung) enthält, die für die Erfassung fehlgeschlagener SQL -Ausführungsinformationen geeignet sind.

 $result = $mysqli->query("BROKEN SQL");
if (!$result) {
    foreach ($mysqli->error_list as $error) {
        echo "Error [{$error['errno']}]: {$error['error']}" . PHP_EOL;
    }
}

2. Integrieren Sie die Protokollierungslogik

Um eine vollständigere Protokollierung zu erzielen, können wir eine Protokollfunktion, Aufzeichnungsfehler und Warninformationen sowie relevante Kontexte (z. B. SQL -Anweisungen, Ausführungszeit, Zugriffsquelle usw.) für die anschließende Fehlerbehebung und Optimierung zusammenfassen.

2.1 Kerncodestruktur

 function log_db_activity(mysqli $mysqli, string $sql, $result): void {
    $log = [];

    // AufzeichnenSQLStellungnahme
    $log['sql'] = $sql;
    $log['time'] = date('c');

    // Überprüfen Sie auf Fehler
    if (!$result && !empty($mysqli->error_list)) {
        $log['errors'] = $mysqli->error_list;
    }

    // Warnung überprüfen
    if ($warning = $mysqli->get_warnings()) {
        $log['warnings'] = [];
        do {
            $log['warnings'][] = [
                'errno' => $warning->errno,
                'message' => $warning->message,
            ];
        } while ($warning->next());
    }

    if (!empty($log['errors']) || !empty($log['warnings'])) {
        // Kann durch eine Datenbank- oder Persistenzmethode ersetzt werden
        file_put_contents(__DIR__ . '/db_log.json', json_encode($log, JSON_PRETTY_PRINT) . PHP_EOL, FILE_APPEND);
    }
}

2.2 Wie man benutzt

 $mysqli = new mysqli("localhost", "user", "pass", "database");

$sql = "INSERT INTO users (id, name) VALUES (1, 'Tom')";
$result = $mysqli->query($sql);

log_db_activity($mysqli, $sql, $result);

3. Wertmanifestation in typischen Szenarien

3.1 Indexversagen Warnung

MySQL wird bei Ausführung einiger Abfragen, die ein Indexfehler verursachen, gewarnt, z. B.:

 $sql = "SELECT * FROM users WHERE name LIKE '%abc%'";

Obwohl diese SQL legal ist und Ergebnisse zurückgeben kann, kann Get_Warnings () seine Effizienzprobleme aufzeigen, was für die Optimierung von Indizes oder die Anpassung der Abfragelogik förderlich ist.

3.2 Warnung zur Datenkürzung

Das Einfügen von Inhalten, das die Länge des Feldes übersteigt, ist möglicherweise nicht ausfällt, aber eine Warnung wird ausgelöst. Durch Protokolle können Felddesign oder Front-End-Überprüfungslogik rechtzeitig entdeckt und optimiert werden.


4. Integrieren Sie sich in den Remote -Protokolldienst

In großen Projekten sollten Protokolle nicht nur im lokalen Text gespeichert werden. Sie können diese Protokolle weiter zu einem Remote -Protokoll -Sammlungsdienst wie https://gitbox.net/api/logs weitergeben:

 function send_log_to_remote(array $log): void {
    $ch = curl_init('https://gitbox.net/api/logs');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
        CURLOPT_POSTFIELDS => json_encode($log),
    ]);
    curl_exec($ch);
    curl_close($ch);
}