Първоначалният ви проблем е, че не проверявахте всеки призив за провал, само няколкото в началото. И двете store_result
и bind_result
също може да се провали.
Вашият специфичен проблем (след като поправите първоначалния) е, че правите select *
за да получите множество колони, но обвързвате само една в резултата. Това е видно от съобщението за грешка, което получавате от bind_result
обадете се:
Ако промените select
изявление към нещо като select id from ...
, ще откриете, че започва да работи.
Въпреки това, ако приемем, че искате повече колони, трябва да предоставите повече променливи в обвързването, нещо като:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Ще забележите, че не използвам select *
там горе е по-добре да използвате изрично именуване на колони в почти всички ситуации, така че:
- не се изненадвате, когато DB схемата се промени;
- получавате само нужните данни;
- можете правилно да съпоставите колоните с променливи на резултата.
Почти единственият място, което някога съм намирал, че е добре да се използва select *
е в инструментите за анализ на DB, където искате да получите всичко. Ако знаете какво искате предварително, това трябва да поискате.