Mysql
 sql >> Database >  >> RDS >> Mysql

L'istruzione preparata da MySQL non procede senza output

Il tuo problema iniziale è che non stavi controllando ogni chiamata al fallimento, solo i pochi all'inizio. Entrambi store_result e bind_result può anche fallire.

Il tuo problema specifico (una volta risolto quello iniziale) è che stai facendo select * per ottenere più colonne ma ne stai vincolando solo uno nel risultato. Questo è evidente dal messaggio di errore che ricevi da bind_result chiama:

Se modifichi il select dichiarazione a qualcosa come select id from ... , scoprirai che inizia a funzionare.

Tuttavia, supponendo che tu vuoi più colonne, dovresti fornire più variabili nell'associazione, qualcosa come:

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

Noterai che non sto usando select * lassù, è meglio usare la denominazione esplicita delle colonne in quasi tutte le situazioni in modo che:

  • non ti sorprendi quando lo schema del database cambia;
  • ottieni solo i dati di cui hai bisogno;
  • puoi mappare correttamente le colonne alle variabili dei risultati.

Praticamente il unico posto che abbia mai trovato va bene usare select * è negli strumenti di analisi DB dove vuoi ottenere tutto. Se sai cosa vuoi in anticipo, è quello che dovresti chiedere.