Bei der Verwendung von PHP für Datenbankoperationen bietet die MySQLI -Erweiterung Funktionen für die Abfrageausführung. Mit einer Datenbankverbindung können wir mehrere SQL -Abfragen ausführen. Wenn Sie jedoch mehrere Abfragen ausführen, können Sie auf ein Problem stoßen - wird MySQLI :: $ errno überschrieben? Mit anderen Worten, wenn mehrere Abfragen eine Verbindung teilen, wie erhalten Sie den Fehlercode für jedes Mal korrekt?
In diesem Beitrag werden wir die Frage erörtern, ob MySQLI :: $ errno überschrieben wird, und eine Lösung für die korrekte Erfassung des Fehlercode zwischen mehreren Abfragen geben.
Mysqli :: $ errno ist eine Eigenschaft in der MySQLI -Klasse, die den Fehlercode der letzten Abfrage zurückgibt. Der Fehlercode ist eine Nummer, die den Status des aktuellen Vorgangs angibt. Wenn der Wert 0 ist, ist kein Fehler aufgetreten.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);
echo "Fehlercode: " . $mysqli->errno;
?>
Im obigen Code gibt $ mysqli-> errno den Fehlercode für die letzte Abfrage zurück.
Wenn Sie mehrere Abfragen in derselben Verbindung ausführen, wird MySQLI :: $ errno nach jeder Abfrage auf einen neuen Fehlercode aktualisiert. Wenn Sie also $ MySQLI-> Errno nach einer Abfrage aufrufen und dann die nächste Abfrage ausführen, wird $ mySQLI-> errno durch den neuen Fehlercode überschrieben.
Zum Beispiel:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";
$mysqli->query($query1);
echo "第一个查询Fehlercode: " . $mysqli->errno . "<br>";
$mysqli->query($query2);
echo "第二个查询Fehlercode: " . $mysqli->errno . "<br>";
?>
Beim Ausführen des oben genannten Code wird $ mysqli-> errno nach der Ausführung der ersten Abfrage den ersten Fehlercode zurückgegeben. Bei der Ausführung der zweiten Abfrage wird er jedoch durch den neuen Fehlercode überschrieben. Daher können Sie den Fehlercode für die letzte Abfrage nur sehen und den Fehlercode für jede Abfrage nicht direkt abrufen.
Um den Fehlercode für jede Abfrage korrekt zu erhalten, können Sie den aktuellen Fehlercode nach Ausführung jeder Abfrage manuell speichern. Eine Variable kann verwendet werden, um den Fehlercode für jede Abfrage aufzuzeichnen, wodurch das Problem der Überschreibung vermieden wird.
Hier ist der verbesserte Code:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$query1 = "SELECT * FROM non_existent_table";
$query2 = "SELECT * FROM another_non_existent_table";
// Führen Sie die erste Abfrage aus
$mysqli->query($query1);
$error_code1 = $mysqli->errno; // 保存第一个查询的Fehlercode
echo "第一个查询Fehlercode: " . $error_code1 . "<br>";
// Führen Sie die zweite Abfrage aus
$mysqli->query($query2);
$error_code2 = $mysqli->errno; // 保存第二个查询的Fehlercode
echo "第二个查询Fehlercode: " . $error_code2 . "<br>";
?>
In diesem Beispiel verwenden wir $ ERROR_CODE1 und $ ERRAGE_CODE2, um den Fehlercode für jede Abfrage zu speichern. Auf diese Weise wird der Fehlercode jeder Abfrage nicht überschrieben, sondern separat aufgezeichnet.
Durch die Verwendung verschiedener Variablen, um den Fehlercode für jede Abfrage zu speichern, können Sie sicherstellen, dass der Fehlercode auch dann nicht überschrieben wird, wenn mehrere Abfragen eine Verbindung teilen. Dieser Ansatz vermeidet Fehloperation und Datenverlust und ermöglicht ein genaueres Debuggen und den Umgang mit Abfragefehlern.
Hoffentlich kann dieser Artikel Ihnen helfen, die Verwendung von MySQLI :: $ errno besser zu verstehen und eine Lösung bereitzustellen, mit der Sie den Fehlercode für jede Abfrage korrekt erhalten können.