Váš počáteční problém je, že jste nekontrolovali každé volání po neúspěchu, jen těch pár na začátku. Oba store_result
a bind_result
může také selhat.
Váš konkrétní problém (až opravíte ten původní) je ten, že děláte select *
získat více sloupce, ale svážete pouze jeden ve výsledku. To je zřejmé z chybové zprávy, kterou dostanete z bind_result
zavolejte:
Pokud změníte select
příkaz na něco jako select id from ...
, zjistíte, že to začíná fungovat.
Nicméně za předpokladu, že chcete více sloupců, měli byste ve vazbě zadat více proměnných, něco jako:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Všimnete si, že nepoužívám select *
tam nahoře je lepší používat explicitní pojmenování sloupců téměř ve všech situacích, takže:
- nebudete překvapeni, když se schéma DB změní;
- získáte pouze data, která potřebujete;
- můžete správně mapovat sloupce na výsledné proměnné.
V podstatě jediné místo, kde jsem kdy zjistil, že je v pořádku použít select *
je v nástrojích pro analýzu DB, kde chcete získat vše. Pokud víte, co chcete předem, měli byste o to požádat.