sql >> Base de Datos >  >> RDS >> Mysql

PDO SQL-state 00000 pero sigue siendo un error?

Es porque $pdo->errorInfo() se refiere a la última instrucción que se ejecutó con éxito. Desde $sql->execute() devuelve falso, entonces no puede referirse a esa declaración (ya sea a nada o a la consulta anterior).

En cuanto a por qué $sql->execute() devuelve falso, no sé... o hay un problema con tus $params matriz o con su conexión de base de datos.

Nota:El manual de PHP (http://php.net/manual/en/pdo .infoerror.php ) no define exactamente qué significa "última operación en el identificador de la base de datos", pero si hubiera un problema con los parámetros de enlace, ese error se habría producido dentro de PDO y sin ninguna interacción con la base de datos. Es seguro decir que si $pdo->execute() devuelve true , que $pdo->errorInfo() es válida. Si $pdo->execute() devuelve false , el comportamiento de $pdo->errorInfo() no está explícitamente claro en la documentación. Si no recuerdo mal de mi experiencia, ejecutar devuelve true , incluso si MySQL devuelve un error, devuelve false si no se ha hecho ninguna operación. Dado que la documentación no es específica, podría ser específica del controlador db.

Esta respuesta refleja la experiencia práctica desde que se escribió en septiembre de 2012. Como ha señalado un usuario, la documentación no reafirma explícitamente esta interpretación. También puede reflejar solo la implementación particular del controlador de la base de datos, pero siempre debe ser cierto que si $pdo->execute() devuelve true , que $pdo->errorInfo() es válido.

También es posible que desee establecer PDO::ERRMODE_EXCEPTION en su secuencia de conexión. El manejo de excepciones hace innecesario verificar y consultar el error.

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