Please be advised, for people who sometimes miss to read this important Manual entry for this function:
If you do not use mysqli_stmt_store_result( ), and immediatley call this function after executing a prepared statement, this function will usually return 0 as it has no way to know how many rows are in the result set as the result set is not saved in memory yet.
mysqli_stmt_store_result( ) saves the result set in memory thus you can immedietly use this function after you both execute the statement AND save the result set.
If you do not save the result set but still want to use this function you have to actually loop through the result set one row at a time using mysqli_stmt_fetch( ) before using this function to determine the number of rows.
A thought though, if you want to determine the number of rows without storing the result set and after looping through it, why not just simply keep an internal counter in your loop every time a row is fetched and save the function call.
In short, this function is only really useful if you save the result set and want to determine the number of rows before looping through it, otherwise you can pretty much recreate its use like I suggested.
mysqli_stmt::$num_rows
mysqli_stmt_num_rows
(PHP 5)
mysqli_stmt::$num_rows -- mysqli_stmt_num_rows — Retourne le nombre de lignes d'un résultat MySQL
Description
Style orienté objet
Style procédural
Retourne le nombre de lignes dans le résultat stmt.
L'utilisation de la fonction mysqli_stmt_num_rows() dépend
de l'utilisation ou non de la fonction mysqli_stmt_store_result()
pour stocker le résultat dans la ressource de commande.
Si vous utilisez mysqli_stmt_store_result(), mysqli_stmt_num_rows() peut être appelée immédiatement.
Liste de paramètres
-
stmt -
Style procédural uniquement : Un identifiant de requête retourné par la fonction mysqli_stmt_init().
Valeurs de retour
Un entier représentant le nombre de lignes dans le résultat.
Exemples
Exemple #1 Style orienté objet
<?php
/* Ouvre la connexion */
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Vérifie la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
if ($stmt = $mysqli->prepare($query)) {
/* Exécution de la requête */
$stmt->execute();
/* Stockage du résultat */
$stmt->store_result();
printf("Nombre de lignes : %d.\n", $stmt->num_rows);
/* Fermeture de la commande */
$stmt->close();
}
/* Fermeture de la connexion */
$mysqli->close();
?>
Exemple #2 Style procédural
<?php
/* Ouvre la connexion */
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Vérifie la connexion */
if (mysqli_connect_errno()) {
printf("Échec de la connexion : %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
if ($stmt = mysqli_prepare($link, $query)) {
/* Exécution de la requête */
mysqli_stmt_execute($stmt);
/* Stockage du résultat */
mysqli_stmt_store_result($stmt);
printf("Nombre de lignes : %d.\n", mysqli_stmt_num_rows($stmt));
/* Fermeture de la commande */
mysqli_stmt_close($stmt);
}
/* Fermeture de la connexion */
mysqli_close($link);
?>
Les exemples ci-dessus vont afficher :
Nombre de lignes : 20.
Voir aussi
- mysqli_stmt_affected_rows() - Retourne le nombre total de lignes modifiées, effacées ou insérées par la dernière requête
- mysqli_prepare() - Prépare une requête SQL pour l'exécution
- mysqli_stmt_store_result() - Stocke un jeu de résultats depuis une requête préparée
