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 );