mysqli_result - rowcount php
mysqli_statement:: num_rows() devuelve el valor incorrecto (3)
Estaba escribiendo una clase de manejador de base de datos en PHP usando la clase mysqli y las declaraciones preparadas. Estaba intentando imprimir el resultado. No funcionó desde el principio, así que decidí hacer algunas depuraciones. Traté de usar el método num_rows()
de la clase mysqli_statement
, pero no dejaba de devolver 0. Decidí escribir una pequeña porción del código de prueba para mantenerlo más simple y poder ver lo que estaba pasando mal. Luego pude devolver los datos que quería, pero el método num_rows()
todavía devuelve 0 incluso cuando realmente 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();
}
Así que sí, el resultado esperado es:
1name
Y el resultado real es:
0name
¿Alguien puede decirme por qué es esto?
Me pregunto si num_rows () informa sobre el resultado actual. Intenta 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?
No parece que hayas declarado $ nombre.
Además, intente eliminar bind_result () y fetch () para que lea algo como esto:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d./n", $statement->num_rows);
num_rows no es un método, es una propiedad.