sql >> Databáze >  >> RDS >> Mysql

PDOStatement::execute() vrací true, ale data se neaktualizují

Když execute() vrátí true znamená to, že prohlášení bylo "úspěšné", ale to neznamená, že se něco změnilo. Znamená to pouze, že nedošlo k žádné chybě.

  • Může se shodovat s nulovými řádky kvůli podmínkám v klauzuli WHERE. To je stále považováno za „úspěch“. Můžete zkusit SELECT se stejnou klauzulí WHERE a načtěte výsledky, abyste potvrdili, že odpovídá řádkům.

  • Může se shodovat s jedním nebo více řádky, ale hodnoty, které nastavujete, jsou již hodnoty na těchto řádcích. Můžete zavolat $sth->rowCount() po spuštění, abyste zjistili, kolik řádků UPDATE ovlivnila (může být menší než počet odpovídajících řádků).

  • Pokud máte více než jednu kopii této tabulky, měli byste znovu zkontrolovat, zda byla změna provedena v databázi, kterou čtete. Občas se mi to stává -- zapomenu změnit konfigurační soubor aplikace a neuvědomuji si, že aktualizuji špatnou databázi.

Toto se ukázalo jako problém – variace na třetí bod:

  • Pokud pracujete na více než jednom serveru, také znovu zkontrolujte, zda kontrolujete změny na správném serveru mysql.


  1. Změňte režim podezření z databáze SQL na normální režim pomocí dotazu

  2. Jak vložit HashMap do PostgreSQL jako typ JSON?

  3. Jak optimalizovat tento komplikovaný EAV MYSQL dotaz?

  4. Chybějící výraz při výběru všech sloupců a jednoho dalšího