Setiap metode mysqli bisa gagal. Anda harus menguji setiap nilai pengembalian. Jika salah satu gagal, pikirkan apakah masuk akal untuk melanjutkan dengan objek yang tidak dalam keadaan yang Anda harapkan. (Berpotensi tidak dalam keadaan "aman", tapi saya pikir itu bukan masalah di sini.)
Karena hanya pesan kesalahan untuk operasi terakhir yang disimpan per koneksi/pernyataan, Anda mungkin kehilangan informasi tentang apa menyebabkan kesalahan jika Anda melanjutkan setelah terjadi kesalahan. Anda mungkin ingin menggunakan informasi itu untuk membiarkan skrip memutuskan apakah akan mencoba lagi (hanya masalah sementara), mengubah sesuatu atau keluar sepenuhnya (dan melaporkan bug). Dan itu membuat proses debug jauh lebih mudah.
$stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)");
// prepare() can fail because of syntax errors, missing privileges, ....
if ( false===$stmt ) {
// and since all the following operations need a valid/ready statement object
// it doesn't make sense to go on
// you might want to use a more sophisticated mechanism than die()
// but's it's only an example
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$rc = $stmt->bind_param('iii', $x, $y, $z);
// bind_param() can fail because the number of parameter doesn't match the placeholders in the statement
// or there's a type conflict(?), or ....
if ( false===$rc ) {
// again execute() is useless if you can't bind the parameters. Bail out somehow.
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$rc = $stmt->execute();
// execute() can fail for various reasons. And may it be as stupid as someone tripping over the network cable
// 2006 "server gone away" is always an option
if ( false===$rc ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
$stmt->close();
Hanya beberapa catatan enam tahun kemudian...
Ekstensi mysqli sangat mampu melaporkan operasi yang menghasilkan kode kesalahan (mysqli) selain 0 melalui pengecualian, lihat mysqli_driver::$report_mode
.
die()
benar-benar kasar dan saya tidak akan menggunakannya bahkan untuk contoh seperti ini lagi.
Jadi tolong, singkirkan saja fakta bahwa setiap (mysql) operasi bisa gagal karena beberapa alasan; bahkan jika hal yang sama berjalan dengan baik ribuan kali sebelumnya....