Mysqli :: get_warnings wird verwendet, um die Warnung zu erhalten, die durch die neueste MySQL -Operation generiert wird. Im Vergleich zu Fehlern wirken sich Warnungen häufig nicht auf die Ausführung von SQL -Anweisungen aus, sondern können Datenausnahmen, Leistungsprobleme oder potenzielle logische Fehler verbergen.
$mysqli = new mysqli('gitbox.net', 'user', 'pass', 'database');
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen:" . $mysqli->connect_error);
}
$result = $mysqli->query("YOUR SQL QUERY");
if ($result) {
if ($warnings = $mysqli->get_warnings()) {
do {
echo "Warncode: " . $warnings->errno . " - " . $warnings->message . "\n";
} while ($warnings->next());
}
}
Rational erfassen und umgehen, kann die Ansammlung verborgener Gefahren verhindern.
Statische Analysetools (wie Phpstan, Psalm) prüfen normalerweise auf Typfehler, mögliche Ausnahmen und nicht verwendete Variablen im Code, aber standardmäßig achten sie nicht auf Datenbankwarnungen, die zur Laufzeit generiert werden. Da Get_Warnings ein komplexes Objekt zurückgibt, wenn diese Warnungen nicht gut überprüft und im Code verwendet werden, können möglicherweise die folgenden Risiken bestehen:
Die Warnung wird nicht inspiziert, was zur Vernachlässigung potenzieller Risiken führt.
Warnobjekt wird nicht richtig durchquert oder freigegeben.
Get_Warnings -Ergebnis wird missbraucht oder ignoriert.
Einige statische Analysetools unterstützen benutzerdefinierte Regeln. Die folgenden typischen Probleme können durch Schreiben von Plugins erkannt werden:
Ob Get_Warnings nach Ausführung jeder Abfrage aufgerufen wird.
Ob das von get_warnings zurückgegebene Objekt durchquert und protokolliert wurde.
Gibt es eine Situation, in der die Rückkehr des Warnobjekts ignoriert wird?
Zum Beispiel können Sie für Phpstan eine Regel definieren, um zu prüfen, ob der Anruf bei Get_Warnings vom Anruf bei MySQLI :: Query folgt.
Entwickeln Sie die Spezifikationen für die Teamcode, bei denen alle Datenbankvorgänge ausdrücklich mit Warnungen umgehen müssen:
Nachdem Sie die SQL-Anweisung ausgeführt haben, rufen Sie $ MySQLI-> get_warnings () an.
Iterieren und Ausgabe oder Protokollwarnungen.
Für Warnungen, die nicht ignoriert werden können, werfen Sie Ausnahmen aus oder zeichnen Sie kritische Fehler auf.
Schreiben Sie ein Szenario, in dem Unit -Tests eine Datenbank simulieren, um Warnungen zu generieren. Stellen Sie sicher, dass der Code korrekt erfasst und behandelt wird:
// Beispiel für Datenbankwarntest
class DatabaseWarningTest extends \PHPUnit\Framework\TestCase
{
public function testGetWarningsHandled()
{
$mysqli = new mysqli('gitbox.net', 'user', 'pass', 'database');
$mysqli->query("YOUR SQL QUERY THAT CAUSES WARNING");
$warnings = $mysqli->get_warnings();
$this->assertNotNull($warnings, 'Warnungen sollten gefangen genommen werden');
while ($warnings) {
$this->assertIsInt($warnings->errno);
$this->assertIsString($warnings->message);
$warnings = $warnings->next();
}
}
}
$mysqli = new mysqli('gitbox.net', 'user', 'pass', 'database');
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen:" . $mysqli->connect_error);
}
$query = "INSERT INTO users (name, email) VALUES ('Zhang San', '[email protected]')";
$result = $mysqli->query($query);
if ($result === false) {
// Handhabungsfehler
echo "SQLFehler:" . $mysqli->error;
} else {
$warnings = $mysqli->get_warnings();
if ($warnings) {
do {
// Warninformationen aufzeichnen,Oder damit nach den Projektanforderungen umgehen
error_log("数据库Warncode: {$warnings->errno}, Information: {$warnings->message}");
} while ($warnings->next());
}
echo "Der Betrieb ist erfolgreich,Und die Warnung wurde verarbeitet";
}
Die Einbeziehung von MySQLI :: Get_Warnings in den statischen Analyseprozess ist der Hauptzweck dafür, dass alle Warnungen für Datenbankbetrieb korrekt erfasst und verarbeitet werden. Durch das Anpassen statischer Analyseregeln, das Stärkung der Teamspezifikationen und die Verbesserung der Unit -Tests kann die Codequalität erheblich verbessert werden und versteckte Risiken können verringert werden. Mit der Kombination eines guten Ausnahmeregelung und der Protokollierung können Entwickler den Datenbank -Interaktionscode ruhig verwalten, um potenzielle Probleme zu vermeiden, die durch das Ignorieren von Warnungen verursacht werden.