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());
}
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;
}
}
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.
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);
}
}
$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);
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.
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.
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);
}