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.