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:

<br />
$lobj_mysqliQuery = $pobj_DBObject-&gt;stmt_init();<br />
$lobj_mysqliQuery-&gt;prepare(&quot;SELECT id FROM usuario WHERE nome like ?&quot;);<br />
$lobj_mysqliQuery-&gt;bind_param(&quot;s&quot;, $plstr_usuarioNome);<br />
$lobj_mysqliQuery-&gt;execute();</p>
<p>$llng_usuarioQuantidade = $lobj_mysqliQuery-&gt;num_rows;<br />

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:

<br />
$lobj_mysqliQuery = $pobj_DBObject-&gt;stmt_init();<br />
$lobj_mysqliQuery-&gt;prepare(&quot;SELECT id FROM usuario WHERE nome like ?&quot;);<br />
$lobj_mysqliQuery-&gt;bind_param(&quot;s&quot;, $plstr_usuarioNome);<br />
$lobj_mysqliQuery-&gt;execute();<br />
$lobj_mysqliQuery-&gt;store_result();</p>
<p>$llng_usuarioQuantidade = $lobj_mysqliQuery-&gt;num_rows;<br />

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

Deixe uma resposta

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