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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top