$pdo->errorInfo()が原因です 正常に実行された最後のステートメントを参照します。 $sql->execute()以降 falseを返す場合、そのステートメントを参照することはできません(何も参照しないか、以前のクエリを参照することはできません)。
理由について$sql->execute() falseを返します、わかりません... $paramsに問題があります アレイまたはデータベース接続を使用します。
注:PHPマニュアル( https://php.net/manual/en/pdo .errorinfo.php
)は、「データベースハンドルの最後の操作」が何を意味するかを正確に定義していませんが、バインディングパラメータに問題があった場合、そのエラーはPDO内で、データベースとの対話なしで発生します。 $pdo->execute()の場合、 trueを返します 、その$pdo->errorInfo() 有効です。 $pdo->execute()の場合 falseを返します 、$pdo->errorInfo()の動作 ドキュメントから明確に明確ではありません。私の経験から正しく思い出せば、executeはtrueを返します 、MySQLがエラーを返した場合でも、falseを返します 操作が行われなかった場合。ドキュメントは特定されていないため、dbドライバー固有である可能性があります。
この回答は、2012年9月に作成された時点での実際の経験を反映しています。ユーザーが指摘しているように、ドキュメントはこの解釈を明示的に再確認していません。また、特定のデータベースドライバーの実装のみを反映している場合もありますが、$pdo->execute()の場合は常に真である必要があります。 trueを返します 、その$pdo->errorInfo() 有効です。
PDO ::ERRMODE_EXCEPTIONを設定することもできます 接続シーケンスで。例外処理により、エラーのチェックとクエリが不要になります。
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );