Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vorbereitete MYSQLI-Anweisung führt keine Ausgabe aus

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.