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.