mysqli_statement::num_rows() devuelve el valor incorrecto
Pregunta
Estaba escribiendo una clase de controlador de base de datos en PHP usando la clase mysqli y declaraciones preparadas.Estaba intentando imprimir el resultado.No funcionó desde el principio, así que decidí hacer un poco de depuración.Intenté usar el num_rows()
método de la mysqli_statement
clase, pero seguía devolviendo 0.Decidí escribir una pequeña porción del código de prueba para hacerlo más simple y poder ver qué estaba fallando.Luego pude devolver los datos que quería, pero el num_rows()
El método todavía devuelve 0 incluso cuando en realidad está seleccionando y recuperando algunos datos.Aquí está el 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();
}
Entonces sí, el resultado esperado es:
1name
Y el resultado real es:
0name
¿Alguien puede decirme por qué es esto?
Solución
Me pregunto si num_rows() informa en relación con el conjunto de resultados actual.Intente capturar num_rows() antes de recuperar los datos.p.ej.
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
¿Eso tiene algún efecto?
Otros consejos
num_rows no es un método, es una propiedad.
No parece que hayas declarado $nombre.
Además, intente eliminar bind_result() y fetch() para que se lea algo como esto:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);