Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PDO SQL-state 00000, mas ainda erro?


É porque $pdo->errorInfo() refere-se à última instrução que foi executada com sucesso. Desde $sql->execute() retorna false, então ele não pode se referir a essa declaração (seja para nada ou para a consulta anterior).

Por que $sql->execute() retorna false, não sei... ou há um problema com seu $params array ou com sua conexão de banco de dados.

Nota:O manual do PHP (http://php.net/manual/en/pdo .errorinfo.php ) não define exatamente o que significa "última operação no identificador do banco de dados", mas se houvesse um problema com os parâmetros de associação, esse erro teria ocorrido dentro do PDO e sem nenhuma interação com o banco de dados. É seguro dizer que se $pdo->execute() retorna true , que $pdo->errorInfo() é válido. Se $pdo->execute() retorna false , o comportamento de $pdo->errorInfo() não está explicitamente claro na documentação. Se me lembro corretamente da minha experiência, execute retorna true , mesmo se o MySQL retornar um erro, retornará false se nenhuma operação foi feita. Como a documentação não é específica, pode ser específica do driver db.

Esta resposta reflete a experiência prática de quando foi escrita em setembro de 2012. Como um usuário apontou, a documentação não reafirma explicitamente essa interpretação. Também pode refletir apenas a implementação do driver de banco de dados específico, mas deve ser sempre verdade que se $pdo->execute() retorna true , que $pdo->errorInfo() é válido.

Você também pode definir PDO::ERRMODE_EXCEPTION em sua seqüência de conexão. O tratamento de exceção torna desnecessário verificar e consultar o erro.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );