sql >> Databáze >  >> RDS >> Mysql

Připravený příkaz MYSQLI nemá žádný výstup

Váš počáteční problém je, že jste nekontrolovali každé volání po neúspěchu, jen těch pár na začátku. Oba store_result a bind_result může také selhat.

Váš konkrétní problém (až opravíte ten původní) je ten, že děláte select * získat více sloupce, ale svážete pouze jeden ve výsledku. To je zřejmé z chybové zprávy, kterou dostanete z bind_result zavolejte:

Pokud změníte select příkaz na něco jako select id from ... , zjistíte, že to začíná fungovat.

Nicméně za předpokladu, že chcete více sloupců, měli byste ve vazbě zadat více proměnných, něco jako:

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

Všimnete si, že nepoužívám select * tam nahoře je lepší používat explicitní pojmenování sloupců téměř ve všech situacích, takže:

  • nebudete překvapeni, když se schéma DB změní;
  • získáte pouze data, která potřebujete;
  • můžete správně mapovat sloupce na výsledné proměnné.

V podstatě jediné místo, kde jsem kdy zjistil, že je v pořádku použít select * je v nástrojích pro analýzu DB, kde chcete získat vše. Pokud víte, co chcete předem, měli byste o to požádat.



  1. Chyba při restartování kazety Openshift MySQL

  2. Problém s ukládáním hodnot zeměpisné šířky a délky do databáze MySQL

  3. Parametrizovaný dotaz SQL s LIKE '% ? %' PHP

  4. ladit dotaz mysqli pomocí nebo zemřít mysqli_error