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ć.