Setiap kali Anda mendapatkan ...
"Peringatan: mysqli_fetch_object () mengharapkan parameter 1 menjadi mysqli_result, boolean diberikan"
... kemungkinan karena ada masalah dengan permintaan Anda. The prepare()
atau query()
kekuatan kembali FALSE
(Boolean), tapi pesan kegagalan generik ini tidak meninggalkan Anda banyak di jalan petunjuk. Bagaimana Anda mengetahui apa yang salah dengan kueri Anda? Kamu bertanya !
Pertama-tama, pastikan pelaporan kesalahan dihidupkan dan terlihat: tambahkan dua baris ini ke bagian atas file Anda tepat setelah <?php
tag pembuka Anda :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Jika pelaporan kesalahan Anda telah diatur dalam php.ini Anda tidak perlu khawatir tentang ini. Pastikan Anda menangani kesalahan dengan anggun dan tidak pernah mengungkapkan penyebab sebenarnya dari masalah apa pun kepada pengguna Anda. Mengungkap penyebab sebenarnya bagi publik bisa menjadi undangan terukir emas bagi mereka yang ingin merusak situs dan server Anda. Jika Anda tidak ingin mengirim kesalahan ke browser, Anda selalu dapat memonitor log kesalahan server web Anda. Lokasi log akan bervariasi dari satu server ke server misalnya, pada Ubuntu log kesalahan biasanya terletak di /var/log/apache2/error.log
. Jika Anda memeriksa log kesalahan di lingkungan Linux, Anda dapat menggunakan tail -f /path/to/log
di jendela konsol untuk melihat kesalahan saat terjadi secara real-time .... atau saat Anda membuatnya.
Setelah Anda dihadapkan pada pelaporan kesalahan standar, menambah pemeriksaan kesalahan pada koneksi database Anda dan pertanyaan akan memberi Anda lebih banyak detail tentang masalah yang terjadi. Lihat contoh ini di mana nama kolom salah. Pertama, kode yang mengembalikan pesan kesalahan fatal umum:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
Kesalahannya bersifat umum dan tidak terlalu membantu Anda dalam menyelesaikan apa yang sedang terjadi.
Dengan beberapa baris kode Anda bisa mendapatkan informasi yang sangat terperinci yang dapat Anda gunakan untuk menyelesaikan masalah dengan segera . Periksa prepare()
pernyataan untuk kebenaran dan jika itu baik Anda dapat melanjutkan ke mengikat dan mengeksekusi.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
Jika ada sesuatu yang salah, Anda dapat memuntahkan pesan kesalahan yang membawa Anda langsung ke masalah ini. Dalam hal ini, tidak ada foo
kolom dalam tabel, menyelesaikan masalah itu sepele.
Jika Anda memilih, Anda bisa memasukkan pemeriksaan ini dalam suatu fungsi atau kelas dan memperluasnya dengan menangani kesalahan dengan anggun seperti yang disebutkan sebelumnya.