Votre problème initial est que vous ne vérifiiez pas chaque appeler à l'échec, juste quelques-uns au début. Les deux store_result
et bind_result
peut également échouer.
Votre problème spécifique (une fois que vous avez résolu le problème initial) est que vous faites select *
pour obtenir plusieurs colonnes mais vous n'en liez qu'une dans le résultat. Cela ressort clairement du message d'erreur que vous obtenez du bind_result
appeler :
Si vous modifiez le select
déclaration à quelque chose comme select id from ...
, vous constaterez qu'il commence à fonctionner.
Cependant, en supposant que vous vouliez plus de colonnes, vous devez fournir plus de variables dans la liaison, quelque chose comme :
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Vous remarquerez que je n'utilise pas select *
là-haut, il est préférable d'utiliser un nommage explicite des colonnes dans presque toutes les situations afin que :
- vous n'êtes pas surpris lorsque le schéma de la base de données change ;
- vous n'obtenez que les données dont vous avez besoin ;
- vous pouvez mapper correctement les colonnes aux variables de résultat.
À peu près le seul endroit que j'ai jamais trouvé, il n'y a pas de problème à utiliser select *
est dans les outils d'analyse DB où vous voulez tout obtenir. Si vous savez ce que vous voulez à l'avance, c'est ce que vous devriez demander.