Il tuo problema iniziale è che non stavi controllando ogni chiamata al fallimento, solo i pochi all'inizio. Entrambi store_result
e bind_result
può anche fallire.
Il tuo problema specifico (una volta risolto quello iniziale) è che stai facendo select *
per ottenere più colonne ma ne stai vincolando solo uno nel risultato. Questo è evidente dal messaggio di errore che ricevi da bind_result
chiama:
Se modifichi il select
dichiarazione a qualcosa come select id from ...
, scoprirai che inizia a funzionare.
Tuttavia, supponendo che tu vuoi più colonne, dovresti fornire più variabili nell'associazione, qualcosa come:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Noterai che non sto usando select *
lassù, è meglio usare la denominazione esplicita delle colonne in quasi tutte le situazioni in modo che:
- non ti sorprendi quando lo schema del database cambia;
- ottieni solo i dati di cui hai bisogno;
- puoi mappare correttamente le colonne alle variabili dei risultati.
Praticamente il unico posto che abbia mai trovato va bene usare select *
è negli strumenti di analisi DB dove vuoi ottenere tutto. Se sai cosa vuoi in anticipo, è quello che dovresti chiedere.