Twój początkowy problem polega na tym, że nie sprawdzałeś wszystkich wzywają do porażki, tylko nieliczni na starcie. Oba store_result
i bind_result
może również zawieść.
Twój konkretny problem (po naprawieniu początkowego) polega na tym, że robisz select *
zdobyć wiele kolumny, ale wiążesz tylko jeden w wyniku. Widać to z komunikatu o błędzie, który otrzymujesz z bind_result
zadzwoń:
Jeśli zmienisz select
oświadczenie do czegoś takiego jak select id from ...
, przekonasz się, że zaczyna działać.
Zakładając jednak, że chcesz więcej kolumn, powinieneś podać więcej zmiennych w wiązaniu, na przykład:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Zauważysz, że nie używam select *
tam, lepiej jest używać jawnego nazewnictwa kolumn w prawie wszystkich sytuacjach, aby:
- nie dziwisz się, gdy zmienia się schemat bazy danych;
- otrzymujesz tylko te dane, których potrzebujesz;
- możesz prawidłowo mapować kolumny na zmienne wyników.
Prawie tylko miejsce, które kiedykolwiek znalazłem, można użyć select *
jest w narzędziach do analizy DB, w których chcesz uzyskać wszystko. Jeśli z góry wiesz, czego chcesz, powinieneś o to poprosić.