Ihr anfängliches Problem ist, dass Sie nicht alle überprüft haben Aufruf zum Scheitern, nur wenige am Start. Sowohl store_result
und bind_result
kann auch fehlschlagen.
Ihr spezifisches Problem (sobald Sie das erste behoben haben) ist, dass Sie select *
ausführen um mehrere zu erhalten Spalten, aber Sie binden nur eine im Ergebnis. Das geht aus der Fehlermeldung hervor, die Sie von bind_result
erhalten Aufruf:
Wenn Sie den select
ändern -Anweisung in etwas wie select id from ...
, Sie werden feststellen, dass es funktioniert.
Vorausgesetzt, Sie wollen mehr Spalten, sollten Sie mehr Variablen in der Bindung bereitstellen, etwa so:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);
Sie werden feststellen, dass ich select *
nicht verwende dort oben ist es besser, in fast allen Situationen explizite Spaltennamen zu verwenden, damit:
- Sie sind nicht überrascht, wenn sich das DB-Schema ändert;
- Sie erhalten nur die Daten, die Sie benötigen;
- Sie können Spalten Ergebnisvariablen richtig zuordnen.
So ziemlich das einzige Ort, an dem ich jemals festgestellt habe, dass es in Ordnung ist, select *
zu verwenden ist in DB-Analyse-Tools, wo Sie alles bekommen wollen. Wenn Sie im Voraus wissen, was Sie wollen, sollten Sie danach fragen.