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

PDO SQL-state 00000 ma ancora errore?

È perché $pdo->errorInfo() si riferisce all'ultima istruzione che è stata eseguita correttamente. Poiché $sql->execute() restituisce false, quindi non può fare riferimento a tale affermazione (né a nulla né alla query precedente).

Sul perché $sql->execute() restituisce false, non lo so... o c'è un problema con il tuo $params array o con la tua connessione al database.

Nota:il manuale PHP (http://php.net/manual/en/pdo .errorinfo.php ) non definisce esattamente cosa significa "ultima operazione sull'handle del database", ma se si è verificato un problema con i parametri di associazione, tale errore si sarebbe verificato all'interno di PDO e senza alcuna interazione con il database. È sicuro dire che se $pdo->execute() restituisce true , quel $pdo->errorInfo() è valido. Se $pdo->execute() restituisce false , il comportamento di $pdo->errorInfo() non è esplicitamente chiaro dalla documentazione. Se ricordo correttamente dalla mia esperienza, esegui restituisce true , anche se MySQL ha restituito un errore, restituisce false se non è stata eseguita alcuna operazione. Poiché la documentazione non è specifica, potrebbe essere specifica del driver db.

Questa risposta riflette l'esperienza pratica di quando è stata scritta nel settembre 2012. Come ha sottolineato un utente, la documentazione non riafferma esplicitamente questa interpretazione. Può anche riflettere solo la particolare implementazione del driver del database, ma dovrebbe sempre essere vero che if $pdo->execute() restituisce true , quel $pdo->errorInfo() è valido.

Potresti anche voler impostare PDO::ERRMODE_EXCEPTION nella sequenza di connessione. La gestione delle eccezioni rende superfluo controllare e interrogare l'errore.

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