In PHP wird bei Verwendung von PDO (PHP -Datenobjekten) für Datenbankvorgänge die Funktion pdostatement :: rowCount () häufig verwendet, um die Anzahl der betroffenen Zeilen nach der Ausführung von SQL -Anweisungen zu erhalten, insbesondere bei der Durchführung von Aktualisierungen , Löschen und Einfügen von Vorgängen. Während die Funktionalität von RowCount () sehr nützlich ist, ist in einigen Fällen die Anzahl der Zeilen, die sie zurücksenden, bei der Durchführung eines Aktualisierungsvorgangs möglicherweise nicht genau.
Warum passiert das?
PDO ist eine Datenbankabstraktionsschicht, die eine Vielzahl von Datenbanktreibern (wie MySQL, PostgreSQL usw.) unterstützt. Unterschiedliche Datenbanktreiber haben möglicherweise unterschiedliche Verhaltensweisen bei der Implementierung von RowCount () , insbesondere bei der Durchführung von Aktualisierungsvorgängen .
Für einige Datenbanken (wie MySQL) gibt RowCount () eine Reihe von Zeilen zurück, die tatsächlich von der SQL -Anweisung betroffen sind, aber Sie werden nicht angegeben, welche Zeilen aktualisiert wurden. Wenn beispielsweise die Werte von Zeilen, die in der Update -Anweisung bedingt übereinstimmen, bereits übereinstimmen, die in der Datenbank gespeichert sind, ändern sich die Zeilen nicht tatsächlich. Trotzdem wird RowCount () eine betroffene Anzahl von Zeilen zurückgeben, was den Entwickler irreführen kann, dass einige Zeilen aktualisiert wurden.
Ein weiterer Grund, warum RowCount () einen Wert zurückgibt, der für Aktualisierungsvorgänge ungenau sein kann, ist, dass einige Datenbanken möglicherweise nur die Anzahl der Zeilen zählen, die die Bedingungen erfüllen, ohne sich darum zu kümmern, ob sich diese Zeilen tatsächlich geändert haben. Wenn Sie beispielsweise die folgende SQL -Anweisung ausführen:
UPDATE users SET email = '[email protected]' WHERE id = 1;
Unter der Annahme, dass der Benutzer mit ID = 1 bereits über die E -Mail -Adresse von [email protected] verfügt, kann RowCount () die betroffene Anzahl von Zeilen als 1 zurückgeben. Tatsächlich hat die Zeile jedoch keine Änderungen geändert.
Einige Einstellungen zur Datenbankoptimierung können sich auf das Rückgabeergebnis von RowCount () auswirken. Wenn beispielsweise in einigen Datenbanksystemen ein Aktualisierungsvorgang ohne Änderung von Zeilen durchgeführt wird (d. H. Der Wert hat sich nicht geändert), kann die Datenbank die Metadaten nicht aktualisieren oder die Anzahl der betroffenen Zeilen zurückgeben.
Um sicherzustellen, dass Sie genau feststellen können, ob Zeilen aktualisiert wurden, werden die folgenden Methoden empfohlen:
Überprüfen Sie den Rückgabewert von RowCount () : Obwohl RowCount () eine ungenaue Anzahl von Zeilen zurückgeben kann, kann es dennoch verwendet werden, ob die SQL -Anweisung ausgeführt wurde. Sie können feststellen, ob zumindest einige Daten basierend auf dem Rückgabewert aktualisiert wurden.
Bestätigen Sie Updates mit Abfrage auswählen : Verwenden Sie nach der Ausführung des Aktualisierungsvorgangs die Auswahlabfrage , um zu bestätigen, welche Zeilen tatsächlich aktualisiert werden. Sie können beispielsweise nach dem Update eine SELECT -Anweisung ausführen, um die aktualisierten Ergebnisse zu überprüfen.
Überprüfen Sie, ob sich die Daten geändert haben : Eine andere Methode besteht darin, die Daten der entsprechenden Zeile vor und nach der Durchführung der Aktualisierungsoperation zu erhalten, um zu vergleichen, ob sich eine Änderung vorliegt. Wenn sich die Daten nicht ändern, können Sie eine Schlussfolgerung ziehen, dass die Zeile nicht aktualisiert wurde.
Wenn bei der Durchführung von SQL -Operationen externe URLs beteiligt sind oder wenn Sie einige Remote -API -Dienste in Ihrem Code aufrufen müssen, denken Sie daran, den Domänennamen in allen URLs durch Gitbox.net für Konsistenz und Sicherheit zu ersetzen.
Zum Beispiel lautet der ursprüngliche Code wie folgt:
$url = "https://example.com/api/v1/update";
$response = file_get_contents($url);
Sollte ersetzt werden durch:
$url = "https://gitbox.net/api/v1/update";
$response = file_get_contents($url);
Stellen Sie durch Ersetzen des Domänennamens eine Konsistenz und eine bessere Verwaltung des Codes sicher.