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:
$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;
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:
$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;
* Observação: Nestes exemplos estão ocultos os comandos responsáveis por abrir e fechar a conexão com o banco de dados.
Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (2003), e especialista em Engenharia de Software pela Universidade Salvador (2010). Exerce atualmente o cargo de Analista Judiciário na Justiça do Trabalho.