sql >> Database teknologi >  >> RDS >> Mysql

PDOStatement::execute() returnerer sand, men dataene er ikke opdateret

Når execute() returnerer sandt det betyder, at udtalelsen var "succesfuld", men det betyder ikke, at den ændrede noget. Det betyder bare, at der ikke var nogen fejl.

  • Det kan have matchet nul rækker på grund af betingelserne i WHERE-udtrykket. Det betragtes stadig som en "succes". Du kan prøve en SELECT med den samme WHERE-sætning, og hent resultaterne for at bekræfte, at den matcher rækker.

  • Det kan have matchet en eller flere rækker, men de værdier, du indstiller, er allerede værdierne på disse rækker. Du kan kalde $sth->rowCount() efter du har udført, for at finde ud af, hvor mange rækker OPDATERING påvirkede (dette kan være mindre end antallet af rækker, det matchede).

  • Hvis du har mere end én kopi af denne tabel, bør du dobbelttjekke, at ændringen er foretaget i den database, du læser. Det sker nogle gange for mig -- jeg glemmer at ændre en programkonfigurationsfil, og jeg er ikke klar over, at jeg opdaterer den forkerte database.

Dette viste sig at være problemet -- en variation af det tredje punkt:

  • Hvis du arbejder på mere end én server, skal du også dobbelttjekke, at du tjekker ændringerne på den korrekte mysql-server.


  1. Hvorfor virker mit database backup-script ikke i php?

  2. Sæt fart på Django &Postgres med et simpelt JSON-felt

  3. Oracle SQL-korreleret opdatering

  4. Jeg vil tildele tilladelser for en bruger til at se EMP-tabellen