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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top