sql >> Databasteknik >  >> RDS >> Mysql

MYSQLI förberedd uttalande ger ingen utmatning

Ditt första problem är att du inte kontrollerade varje uppmaning till misslyckande, bara de få i början. Båda store_result och bind_result kan också misslyckas.

Ditt specifika problem (när du har fixat det första) är att du gör select * för att få flera kolumner men du binder bara en i resultatet. Det framgår av felmeddelandet du får från bind_result ring:

Om du ändrar select uttalande till något som select id from ... , kommer du att upptäcka att det börjar fungera.

Men förutsatt att du vill fler kolumner bör du ange fler variabler i bindningen, ungefär som:

$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);

Du kommer att märka att jag inte använder select * där uppe är det bättre att använda explicit kolumnnamn i nästan alla situationer så att:

  • du blir inte förvånad när DB-schemat ändras;
  • du får bara den data du behöver;
  • du kan mappa kolumner till resultatvariabler korrekt.

I stort sett den enda plats jag någonsin har funnit att det är okej att använda select * finns i DB analysverktyg där du vill få allt. Om du vet vad du vill ha i förväg är det vad du ska fråga efter.



  1. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Kommunikationslänkfel

  2. Hur man överför rader till kolumner dynamiskt i MySQL

  3. Sök med kommaseparerat värde mysql

  4. MySQL Workbench - Är Schema samma sak som Database?