Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A instrução preparada MYSQLI continua sem saída


Seu problema inicial é que você não estava verificando todos chamar para o fracasso, apenas alguns no início. Ambos store_result e bind_result também pode falhar.

Seu problema específico (depois de corrigir o inicial) é que você está fazendo select * para obter vários colunas, mas você está vinculando apenas uma no resultado. Isso fica evidente na mensagem de erro que você recebe do bind_result ligar:

Se você alterar o select declaração para algo como select id from ... , você verá que ele começa a funcionar.

No entanto, supondo que você quere mais colunas, você deve fornecer mais variáveis ​​na ligação, algo como:
$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);

Você notará que não estou usando select * lá em cima, é melhor usar a nomenclatura de coluna explícita em quase todas as situações para que:
  • você não fica surpreso quando o esquema do banco de dados muda;
  • você obtém apenas os dados de que precisa;
  • você pode mapear colunas para variáveis ​​de resultado corretamente.

Praticamente o único lugar que eu já encontrei, não há problema em usar select * está em ferramentas de análise de banco de dados onde você deseja obter tudo. Se você sabe o que quer com antecedência, é isso que você deve pedir.