Comando num_rows do MySQLi (prepared statement) retorna apenas o valor 0

Continuando os meus trabalhos de conversão de um código que utilizava a conexão MySQl para a conexão MySQLi encontrei um novo problema: o comando num_rows sempre retornava o valor 0, mesmo nas consultas em que eu sabia que traziam mais resultados:

[code language=”php”]
$lobj_mysqliQuery = $pobj_DBObject->stmt_init();
$lobj_mysqliQuery->prepare("SELECT id FROM usuario WHERE nome like ?");
$lobj_mysqliQuery->bind_param("s", $plstr_usuarioNome);
$lobj_mysqliQuery->execute();

$llng_usuarioQuantidade = $lobj_mysqliQuery->num_rows;
[/code]

Bem, onde estava o erro? Aparentemente (novamente) estava tudo correto. Porém, o MySQLi tem uma forma diferente de ver a vida…:)

O erro estava na ausência da utilização do comando store_result(). Que, segundo o manual do PHP, serve para transferir o resultado da última consulta (Resultset) para a variável desejada. Assim, como não havíamos executado este comando, era como se estivéssemos tentando pegar o número de linhas de um ResultSet vazio.

o código final ficou assim, e funcionou:

[code language=”php”]
$lobj_mysqliQuery = $pobj_DBObject->stmt_init();
$lobj_mysqliQuery->prepare("SELECT id FROM usuario WHERE nome like ?");
$lobj_mysqliQuery->bind_param("s", $plstr_usuarioNome);
$lobj_mysqliQuery->execute();
$lobj_mysqliQuery->store_result();

$llng_usuarioQuantidade = $lobj_mysqliQuery->num_rows;
[/code]

* Observação: Nestes exemplos estão ocultos os comandos responsáveis por abrir e fechar a conexão com o banco de dados.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima