mysqli_statement::num_rows() retorna o valor errado
Pergunta
Eu estava escrevendo uma classe manipuladora de banco de dados em PHP usando a classe mysqli e instruções preparadas.Eu estava tentando imprimir o resultado.Não funcionou logo de cara, então decidi fazer algumas depurações.Eu tentei usar o num_rows()
método do mysqli_statement
classe, mas continuou retornando 0.Decidi escrever uma pequena parte do código de teste para mantê-lo mais simples e poder ver o que estava errado.Consegui então retornar os dados que queria, mas o num_rows()
O método ainda retorna 0 mesmo quando está selecionando e recuperando alguns dados.Aqui está o código:
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if(mysqli_connect_errno())
{
die('connection failed');
}
$statement = $mysqli->stmt_init();
$query = "SELECT name FROM table WHERE id = '2000'";
if($statement->prepare($query))
{
$statement->execute();
$statement->bind_result($name);
$statement->fetch();
$statement->store_result();
echo $statement->num_rows();
echo $name;
}
else
{
echo 'prepare statement failed';
exit();
}
Então, sim, o resultado esperado é:
1name
E o resultado real é:
0name
Alguém pode me dizer por que isso acontece?
Solução
Gostaria de saber se num_rows() está reportando em relação ao conjunto de resultados atual.Tente capturar num_rows() antes de buscar os dados.por exemplo.
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
Isso tem algum efeito?
Outras dicas
num_rows não é um método, é uma propriedade.
Não parece que você declarou $name.
Além disso, tente remover bind_result() e fetch() para que leia algo assim:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);