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.