mysqli_statement :: num_rows () retourne une mauvaise valeur
Question
J'écrivais une classe de gestionnaire de base de données en PHP en utilisant la classe mysqli et des instructions préparées. J'essayais d'imprimer le résultat. Cela n’a pas fonctionné d’emblée, j’ai donc décidé de procéder à un débogage. J'ai essayé d'utiliser la méthode num_rows ()
de la classe mysqli_statement
, mais le résultat renvoyait 0. J'ai décidé d'écrire une petite partie du code de test pour le garder plus simple. pouvait voir ce qui n'allait pas. J'ai pu ensuite renvoyer les données que je voulais, mais la méthode num_rows ()
renvoie toujours 0 même si elle sélectionne et récupère des données. Voici le code:
$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();
}
Alors oui, le résultat attendu est:
1name
Et le résultat réel est:
0name
Quelqu'un peut-il me dire pourquoi?
La solution
Je me demande si num_rows () rapporte par rapport au résultat actuel. Essayez de capturer num_rows () avant d’extraire les données. par exemple
if($statement->prepare($query))
{
$statement->execute();
$statement->store_result();
echo $statement->num_rows();
$statement->bind_result($name);
$statement->fetch();
echo $name;
}
Est-ce que cela a un effet?
Autres conseils
num_rows n'est pas une méthode, c'est une propriété.
Il ne semble pas que vous ayez déclaré $ name.
Essayez également de supprimer bind_result () et fetch () pour qu'il ressemble à ceci:
$statement->execute();
$statement->store_result();
printf("Number of rows: %d.\n", $statement->num_rows);