Masalah awal Anda adalah Anda tidak memeriksa setiap panggilan untuk kegagalan, hanya beberapa di awal. Keduanya store_result
dan bind_result
juga bisa gagal.
Masalah khusus Anda (setelah Anda memperbaiki yang pertama) adalah Anda melakukan select *
untuk mendapatkan banyak kolom tetapi Anda hanya mengikat satu dalam hasil. Itu terbukti dari pesan kesalahan yang Anda dapatkan dari bind_result
hubungi:
Jika Anda mengubah select
pernyataan untuk sesuatu seperti select id from ...
, Anda akan menemukannya mulai bekerja.
Namun, dengan asumsi Anda ingin lebih banyak kolom, Anda harus menyediakan lebih banyak variabel dalam penjilidan, seperti:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Anda akan melihat saya tidak menggunakan select *
di sana, lebih baik menggunakan penamaan kolom eksplisit di hampir semua situasi sehingga:
- Anda tidak akan terkejut ketika skema DB berubah;
- Anda hanya mendapatkan data yang Anda butuhkan;
- Anda dapat memetakan kolom ke variabel hasil dengan benar.
Cukup banyak hanya tempat yang pernah saya temukan boleh menggunakan select *
ada di alat analisis DB tempat Anda ingin mendapatkan semuanya. Jika Anda tahu apa yang Anda inginkan sebelumnya, itulah yang harus Anda minta.