Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'instruction préparée MYSQLI ne produit aucune sortie

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.