Aktueller Standort: Startseite> Neueste Artikel> Was bedeutet die Funktion zurück -1? Mehrere Situationen müssen Sie wissen

Was bedeutet die Funktion zurück -1? Mehrere Situationen müssen Sie wissen

gitbox 2025-06-09

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.


Was ist mySQLI :: $ betroffen_rows

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.


Mehrere Situationen, in denen MySQLI :: $ betroffene_rows -1 zurückgibt

1. Die Ausführung der SQL -Anweisung ist fehlgeschlagen

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
}
?>

2. Führen Sie eine Abfrage aus, die die Anzahl der Zeilen nicht beeinflusst

$ 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
?>

3.. Transaktion nicht engagiert oder automatisch beschlossen wurde geschlossen

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.

4. Unsachgemäße Verwendung von Vorverarbeitungsanweisungen

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.


Wie kann man mit der Situation, in der -1 zurückgegeben wird, richtig behandelt?

  1. Ü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.

  2. Bestätigen Sie den SQL -Anweisungstyp
    betroffene_rows gilt nur für Änderungsvorgänge, und die Abfrageanweisung gibt immer -1 zurück.

  3. Überprüfen Sie den Transaktionsstatus <br> Stellen Sie sicher, dass die Transaktion, die den Vorgang ändert, eingereicht wurde.

  4. Fehlerhafte Urteile über Vorverarbeitungsaussagen <br> machen <br> Überprüfen Sie, ob $ stmt-> execute () erfolgreich ist, und bearbeiten Sie den Fehler rechtzeitig.


Zusammenfassung

  • 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.