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

PDO SQL-stav 00000, ale stále chyba?

Je to proto, že $pdo->errorInfo() odkazuje na poslední příkaz, který byl úspěšně proveden. Od $sql->execute() vrátí false, pak se nemůže odkazovat na tento příkaz (ani na nic, ani na předchozí dotaz).

Proč $sql->execute() vrací false, nevím... buď je problém s vašimi $params pole nebo s vaším databázovým připojením.

Poznámka:Manuál PHP (http://php.net/manual/en/pdo .errorinfo.php ) nedefinuje přesně, co znamená "poslední operace na popisovači databáze", ale pokud by došlo k problému s parametry vazby, došlo by k chybě uvnitř PDO a bez jakékoli interakce s databází. Dá se s jistotou říci, že pokud $pdo->execute() vrátí true , že $pdo->errorInfo() je platný. Pokud $pdo->execute() vrátí false , chování $pdo->errorInfo() není z dokumentace výslovně zřejmé. Pokud si dobře pamatuji ze své zkušenosti, příkaz proveďte návrat true , i když MySQL vrátí chybu, vrátí false pokud nebyla provedena žádná operace. Protože dokumentace není konkrétní, může být specifická pro ovladač db.

Tato odpověď odráží praktické zkušenosti z doby, kdy byla napsána v září 2012. Jak upozornil uživatel, dokumentace tuto interpretaci výslovně nepotvrzuje. Může také odrážet konkrétní implementaci ovladače databáze, ale vždy by mělo platit, že pokud $pdo->execute() vrátí true , že $pdo->errorInfo() je platný.

Můžete také chtít nastavit PDO::ERRMODE_EXCEPTION ve vaší sekvenci připojení. Díky zpracování výjimek není nutné chybu kontrolovat a dotazovat se.

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


  1. Typy kurzoru SQL Server – pouze vpřed statický kurzor | Kurz SQL Server / Kurz TSQL

  2. Dotaz MySQL se zasekl a musel proces zabít

  3. mysql group_concat s počtem uvnitř?

  4. Funkce JSON_ARRAYAGG() v Oracle