sql >> Base de Datos >  >> RDS >> Mysql

La declaración preparada de MYSQLI no produce salida

Tu problema inicial es que no estabas revisando todos llamar al fracaso, sólo unos pocos al principio. Ambos store_result y bind_result también puede fallar.

Su problema específico (una vez que haya solucionado el inicial) es que está haciendo select * para obtener múltiples columnas pero solo estás vinculando una en el resultado. Eso es evidente por el mensaje de error que recibe del bind_result llamar:

Si cambia el select declaración a algo como select id from ... , encontrará que comienza a funcionar.

Sin embargo, suponiendo que quiera más columnas, debe proporcionar más variables en el enlace, algo como:

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

Notarás que no estoy usando select * arriba, es mejor usar nombres de columna explícitos en casi todas las situaciones para que:

  • no se sorprende cuando cambia el esquema de la base de datos;
  • solo obtienes los datos que necesitas;
  • puede asignar columnas a variables de resultado correctamente.

Prácticamente el único lugar en el que he encontrado que está bien usar select * está en las herramientas de análisis de base de datos donde desea obtener todo. Si sabe lo que quiere de antemano, eso es lo que debe pedir.