In PHP ist $ MySQLI-> AffectaP_ROWS eine sehr häufige Eigenschaft, die Ihnen sagen kann, wie viele Zeilen die SQL-Anweisung die zuletzt ausgeführten Daten beeinflusst hat. Manchmal begegnen wir jedoch auf eine Situation, in der $ mysqli-> betroffene_rows -1 zurückkehrt. Was bedeutet das? In diesem Artikel werden Sie mit der Analyse mehrerer häufiger Situationen analysieren, die die Rückkehr -1 im Detail verursachen und Ihnen dabei helfen, Probleme mit Code besser zu verstehen und zu beheben.
MySQLI :: $ Affect_Rows gibt die Anzahl der von der letzten Zeit ausgeführten Anweisungen zurück, die von der letzten Ausführung betroffen, aktualisiert und gelöscht werden. Zum Beispiel:
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$mysqli->query("UPDATE users SET active = 1 WHERE id = 10");
echo $mysqli->affected_rows; // Die Anzahl der betroffenen Zeilen ausgeben
?>
Wenn diese Update-Anweisung erfolgreich ausgeführt wird, gibt $ betroffene_rows eine nicht negative Ganzzahl zurück, die die tatsächliche Anzahl der geänderten Zeilen angibt. Wenn jedoch ein Fehler auftritt oder besondere Umstände, kann der Rückgabewert -1 sein.
Wenn Ihre SQL -Anweisung nicht ausgeführt wird, wie z. B. Syntaxfehler, gibt es keine Tabelle usw., $ betroffene_rows gibt -1 zurück. Zu diesem Zeitpunkt sollten Sie die Fehlermeldung überprüfen, um festzustellen:
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$result = $mysqli->query("UPDATE non_existing_table SET active=1");
if ($result === false) {
echo "Abfrage fehlgeschlagen,Fehlermeldung:" . $mysqli->error;
echo "Anzahl der betroffenen Zeilen:" . $mysqli->affected_rows; // Hier wird ausgegeben -1
}
?>
$ betroffen_rows ist nur für die Änderung von Klassenvorgängen aussagekräftig (einfügen, aktualisieren, löschen). Wenn Sie Auswahl, Anzeigen oder andere Abfragen ausführen, die die Daten nicht ändern, gibt $ betroffene_rows -1 zurück.
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$mysqli->query("SELECT * FROM users");
echo $mysqli->affected_rows; // Ausgabe -1,WeilSELECTWirkt sich nicht auf die Anzahl der Zeilen aus
?>
Wenn Sie eine Transaktion verwenden, führen Sie eine Änderung durch, jedoch nicht verpflichten, $ betroffene_rows können einen Ausreißer zurückgeben. Stellen Sie sicher, dass die Transaktion korrekt eingereicht wurde.
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$mysqli->autocommit(false);
$mysqli->query("UPDATE users SET active=1 WHERE id=5");
echo $mysqli->affected_rows; // Es kann immer noch richtig zeigen
$mysqli->commit();
?>
Nicht übereinstimmende Transaktionen können zu tatsächlichen Ausfällen wirksam werden, und obwohl die Betroffenen normalerweise korrekt zurückkehren, können sie in besonderen Fällen irreführend sein.
Bei einer Vorverarbeitungsanweisung kann in einigen Fällen $ stmt-> betroffene_rows -1 in einigen Fällen sein, beispielsweise wird eine Anweisung, die die Rückgabe der Anzahl der Zeilen nicht unterstützt, oder eine Abfrage schlägt fehl.
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$stmt = $mysqli->prepare("UPDATE users SET active=1 WHERE id=?");
$id = 10;
$stmt->bind_param("i", $id);
$stmt->execute();
echo $stmt->affected_rows; // Wahrscheinlich-1,Zeigt die Ausnahmeausnahme an
?>
Achten Sie darauf, $ stmt-> Fehler zu überprüfen, um zu bestätigen, ob ein Fehler vorliegt.
Überprüfen Sie, ob die SQL -Ausführung erfolgreich ist <br> Durch die Bestimmung, ob der Rückgabewert falsch ist und $ MySQLI-> Fehler aufgerufen wird, um detaillierte Fehlerinformationen zu erhalten.
Bestätigen Sie den SQL -Anweisungstyp
betroffene_rows gilt nur für Änderungsvorgänge, und die Abfrageanweisung gibt immer -1 zurück.
Überprüfen Sie den Transaktionsstatus <br> Stellen Sie sicher, dass die Transaktion, die den Vorgang ändert, eingereicht wurde.
Fehlerhafte Urteile über Vorverarbeitungsaussagen <br> machen <br> Überprüfen Sie, ob $ stmt-> execute () erfolgreich ist, und bearbeiten Sie den Fehler rechtzeitig.
MySQLI :: $ Affect_rows gibt -1 zurück, was normalerweise bedeutet, dass die jüngste SQL -Ausführung fehlgeschlagen ist, oder die Ausführung einer Erklärung, die die Anzahl der Zeilen nicht beeinflusst.
Bei der Verwendung müssen Sie Fehlerinformationen und SQL -Anweisungstypen kombinieren, um Urteile zu fällen.
Wenn Sie Code schreiben, können Sie die Gewohnheit entwickeln, $ MySQLI-> Fehler oder $ stmt-> Fehler zu überprüfen, um schnell Probleme zu finden.
Mit den oben genannten Methoden können Sie die Situation genauer verstehen und umgehen, in der MySQLI :: $ Affect_Rows -1 zurückkehrt, wodurch die Robustheit des Codes und die Debugging -Effizienz verbessert wird.
Verwandte Tags:
mysqli