Mengingat mode kesalahan yang paling direkomendasikan untuk PDO adalah ERRMODE_EXCEPTION
, tidak ada execute()
verifikasi hasil langsung yang akan berfungsi . Karena eksekusi kode bahkan tidak akan mencapai kondisi yang ditawarkan di jawaban lain.
Jadi, ada tiga skenario yang mungkin untuk menangani hasil eksekusi query di PDO:
- Untuk mengetahui keberhasilannya, tidak diperlukan verifikasi. Tetap ikuti alur program Anda.
- Untuk menangani error yang tidak terduga, pertahankan hal yang sama - tidak perlu kode penanganan segera. Pengecualian akan diberikan jika terjadi kesalahan basis data, dan itu akan menggelembung ke penangan kesalahan seluruh situs yang pada akhirnya akan menghasilkan 500 laman kesalahan umum.
- Untuk menangani kesalahan yang diharapkan, seperti kunci utama duplikat, dan jika Anda memiliki skenario tertentu untuk menangani kesalahan khusus ini, gunakan
try..catch
operator.
Untuk pengguna PHP biasa kedengarannya agak asing - bagaimana, bukan untuk memverifikasi hasil langsung dari operasi? - tetapi beginilah tepatnya cara kerja pengecualian - Anda memeriksa kesalahan di tempat lain. Sekali untuk semua. Sangat nyaman.
Jadi, singkatnya: dalam kode biasa Anda tidak memerlukan penanganan error sama sekali. Simpan saja kode Anda apa adanya:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
Jika berhasil, ia akan memberi tahu Anda demikian, jika ada kesalahan ia akan menampilkan halaman kesalahan biasa bahwa aplikasi Anda ditampilkan untuk acara seperti itu.
Hanya jika Anda memiliki skenario penanganan selain hanya melaporkan kesalahan, letakkan pernyataan insert Anda di try..catch
operator, periksa apakah itu kesalahan yang Anda harapkan dan menanganinya; atau - jika kesalahannya berbeda - lemparkan kembali pengecualian, untuk memungkinkan penanganan kesalahan di seluruh situs dengan cara biasa. Di bawah ini adalah contoh kode dari artikel saya tentang penanganan kesalahan dengan PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
Dalam kode di atas kami memeriksa kesalahan tertentu untuk mengambil beberapa tindakan dan mengembalikan pengecualian untuk kesalahan lainnya (tidak ada tabel seperti itu misalnya) yang akan dilaporkan ke programmer.
Sementara lagi - hanya untuk memberi tahu pengguna sesuatu seperti "Penyisipan Anda berhasil", tidak ada ketentuan yang diperlukan.