Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PDOStatement::execute() gibt true zurück, aber die Daten werden nicht aktualisiert

Wenn execute() gibt true zurück es bedeutet, dass die Aussage „erfolgreich“ war, aber es bedeutet nicht, dass sie etwas geändert hat. Es bedeutet nur, dass kein Fehler aufgetreten ist.

  • Aufgrund von Bedingungen in der WHERE-Klausel wurden möglicherweise keine Zeilen gefunden. Das gilt immer noch als "Erfolg". Sie können ein SELECT versuchen mit der gleichen WHERE-Klausel und rufe die Ergebnisse ab, um zu bestätigen, dass sie mit Zeilen übereinstimmen.

  • Möglicherweise stimmte es mit einer oder mehreren Zeilen überein, aber die Werte, die Sie festlegen, sind bereits die Werte in diesen Zeilen. Sie können $sth->rowCount() aufrufen nach der Ausführung, um herauszufinden, wie viele Zeilen das UPDATE betroffen hat (Dies kann weniger als die Anzahl der übereinstimmenden Zeilen sein).

  • Wenn Sie mehr als eine Kopie dieser Tabelle haben, sollten Sie überprüfen, ob die Änderung in der Datenbank, die Sie lesen, vorgenommen wurde. Es passiert mir manchmal – ich vergesse, eine Anwendungskonfigurationsdatei zu ändern, und ich merke nicht, dass ich die falsche Datenbank aktualisiere.

Dies stellte sich als das Problem heraus – eine Variation des dritten Punktes:

  • Wenn Sie auf mehr als einem Server arbeiten, überprüfen Sie auch, ob Sie die Änderungen auf dem richtigen MySQL-Server überprüfen.