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?

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top