Arquivo da tag: MySQLi

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:

$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 (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).

Warning: mysqli_connect() [function.mysqli-connect]: (HY000/2005): Unknown MySQL server host ‘localhost:3306’ (11004)

Ao tentar migrar um sistema PHP das conexões MySQL para MySQLi, me deparei com o seguinte problema:

Warning: mysqli_connect() [function.mysqli-connect]: (HY000/2005): Unknown MySQL server host ‘localhost:3306’ (11004)

Aparentemente não havia erro:

$lobj_Database = mysqli_connect(SETTINGS_SGBD_HOST.":".SETTINGS_SGBD_PORT, SETTINGS_SGBD_USER, SETTINGS_SGBD_PASSWORD, SETTINGS_SGBD_DATABASE);

Aparentemente, pois não me lembrei que a sintaxe do MySQLi é um pouco diferente. O endereço da porta passa a ser o último parâmetro da conexão. Ficando assim:

$lobj_Database = mysqli_connect(SETTINGS_SGBD_HOST, SETTINGS_SGBD_USER, SETTINGS_SGBD_PASSWORD, SETTINGS_SGBD_DATABASE, SETTINGS_SGBD_PORT);

Importante lembrar que este é um método de conexão estilo procedural, e que o MySQLi suporta o estilo orientado a objeto também.

Natural de Salvador-BA, é graduado em Analise de Sistemas pela Universidade Católica do Salvador (UCSal, 2003), e Especialista em Engenharia de Software pela Universidade Salvador (2010).