Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQLi menyiapkan laporan kesalahan pelaporan

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....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data MySQL apa yang harus digunakan untuk Lintang/Bujur dengan 8 tempat desimal?

  2. Format Angka sebagai Persentase di MySQL

  3. Memeriksa beberapa kolom untuk satu nilai

  4. Cara membuat kunci primer komposit dengan benar - MYSQL

  5. MySQL - paksa untuk tidak menggunakan cache untuk menguji kecepatan kueri