Itu karena $pdo->errorInfo()
mengacu pada pernyataan terakhir yang berhasil dieksekusi. Sejak $sql->execute()
mengembalikan false, maka itu tidak dapat merujuk ke pernyataan itu (baik ke nol atau ke kueri sebelumnya).
Mengapa $sql->execute()
mengembalikan false, saya tidak tahu... apakah ada masalah dengan $params
your Anda array atau dengan koneksi database Anda.
Catatan:Manual PHP (http://php.net/manual/en/pdo .errorinfo.php
) tidak mendefinisikan dengan tepat apa yang dimaksud dengan "operasi terakhir pada pegangan basis data", tetapi jika ada masalah dengan parameter pengikatan, kesalahan itu akan terjadi di dalam PDO dan tanpa interaksi apa pun dengan basis data. Aman untuk mengatakan bahwa jika $pdo->execute()
mengembalikan true
, bahwa $pdo->errorInfo()
adalah benar. Jika $pdo->execute()
mengembalikan false
, perilaku $pdo->errorInfo()
tidak secara eksplisit jelas dari dokumentasi. Jika saya mengingat dengan benar dari pengalaman saya, jalankan kembali true
, bahkan jika MySQL mengembalikan kesalahan, mengembalikan false
jika tidak ada operasi yang dilakukan. Karena dokumentasinya tidak spesifik, mungkin spesifik driver db.
Jawaban ini mencerminkan pengalaman praktis sejak ditulis pada September 2012. Seperti yang telah ditunjukkan oleh pengguna, dokumentasi tidak secara eksplisit menegaskan kembali interpretasi ini. Ini juga mungkin hanya mencerminkan implementasi driver database tertentu, tetapi harus selalu benar bahwa jika $pdo->execute()
mengembalikan true
, bahwa $pdo->errorInfo()
valid.
Anda mungkin juga ingin menyetel PDO::ERRMODE_EXCEPTION dalam urutan koneksi Anda. Penanganan pengecualian membuatnya tidak perlu memeriksa dan menanyakan kesalahan.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );