J'écrivais une classe de gestionnaire de base de données en PHP en utilisant la classe mysqli et les instructions préparées. J'essayais d'imprimer le résultat. Cela n'a pas fonctionné dès le départ, j'ai donc décidé de faire du débogage. J'ai essayé d'utiliser la méthode num_rows()
de la classe mysqli_statement
, mais elle a continué à renvoyer 0. J'ai décidé d'écrire une petite partie du code de test pour la simplifier afin que je puisse voir ce qui n'allait pas. J'ai alors pu renvoyer les données que je voulais, mais la méthode num_rows()
renvoie toujours 0 même lorsqu'elle sélectionne et récupère certaines données. Voici le code:mysqli_statement :: num_rows() retourne la mauvaise valeur
$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 est-ce?
En effet, c'était le problème. Pour que num_rows() renvoie la bonne valeur, store_result() doit être appelé avant fetch(). –
C'est ce que je pensais; récupérer les données incrémente le compteur de ligne interne, de sorte que vous pouvez faire quelque chose comme while ($ instruction-> num_rows()) {/ * faire des trucs * /} –
Je crois fortement que le commentaire de @ StevenOxley est la réponse à cette question. – Sablefoste