sql >> Database >  >> RDS >> Mysql

MYSQLI voorbereide instructie gaat geen uitvoer voort

Uw eerste probleem is dat u niet elke oproep tot mislukking, alleen de weinigen aan het begin. Beide store_result en bind_result kan ook mislukken.

Uw specifieke probleem (zodra u het eerste probleem heeft opgelost) is dat u select * doet om meerdere te krijgen kolommen, maar u bindt er slechts één bij het resultaat. Dat blijkt uit de foutmelding die je krijgt van de bind_result bel:

Als u de select . wijzigt statement naar iets als select id from ... , zult u zien dat het begint te werken.

Echter, ervan uitgaande dat u wilt meer kolommen, moet u meer variabelen in de binding opgeven, zoiets als:

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

Je zult merken dat ik select * niet gebruik daarboven is het beter om in bijna alle situaties expliciete kolomnaamgeving te gebruiken, zodat:

  • je wordt niet verrast als het DB-schema verandert;
  • u krijgt alleen de gegevens die u nodig heeft;
  • u kunt kolommen correct toewijzen aan resultaatvariabelen.

Vrijwel de enige plaats waar ik ooit heb gevonden dat het oké is om select * . te gebruiken bevindt zich in DB-analysetools waar u alles wilt krijgen. Als je van tevoren weet wat je wilt, moet je daar om vragen.



  1. Geen geschikt stuurprogramma gevonden voor 'jdbc:mysql://localhost:3306/mysql

  2. Hoe los ik met SSDT SQL71561-fouten op als ik een weergave heb die verwijst naar objecten in een andere database?

  3. mysql zoeken naar een catid in een tekstveld

  4. Waarom wordt de rij met de laagste ID altijd geretourneerd wanneer ook een MAX-waarde voor een kolom wordt geretourneerd?