sql >> Databasteknik >  >> RDS >> Mysql

PDOStatement::execute() returnerar true men data uppdateras inte

När execute() returnerar true det betyder att uttalandet var "lyckat", men det betyder inte att det ändrade någonting. Det betyder bara att det inte var något fel.

  • Det kan ha matchat nollrader på grund av villkoren i WHERE-satsen. Det anses fortfarande vara en "framgång". Du kan prova en SELECT med samma WHERE-sats och hämta resultaten för att bekräfta att den matchar rader.

  • Det kan ha matchat en eller flera rader, men värdena du anger är redan värdena på dessa rader. Du kan anropa $sth->rowCount() efter att du har kört, för att ta reda på hur många rader UPDATEN påverkade (detta kan vara mindre än antalet rader det matchade).

  • Om du har mer än en kopia av den här tabellen bör du dubbelkolla att ändringen har gjorts i databasen du läser. Det händer mig ibland -- jag glömmer att ändra en programkonfigurationsfil och jag inser inte att jag uppdaterar fel databas.

Detta visade sig vara problemet -- en variant på den tredje punkten:

  • Om du arbetar på mer än en server, dubbelkolla också att du kontrollerar ändringarna på rätt mysql-server.


  1. SQLiteOpenHelper:metoden onCreate() anropas inte på fysisk enhet

  2. MySQL:ALTER IGNORE TABLE LÄGG TILL UNIK, vad kommer att trunkeras?

  3. MySQL Left Joins:Välj allt från en tabell, men bara matchande värde i den andra tabellen med kriterier

  4. mysqldump:Fel 2020:Fick paket större än 'max_allowed_packet' byte vid dumpning av tabell