Position actuelle: Accueil> Derniers articles> Comment obtenir efficacement le nombre de lignes de résultats de requête en combinaison avec les fonctions mysql_fetch_assoc et mysql_num_rows? Meilleurs pratiques Partage

Comment obtenir efficacement le nombre de lignes de résultats de requête en combinaison avec les fonctions mysql_fetch_assoc et mysql_num_rows? Meilleurs pratiques Partage

gitbox 2025-09-28

Lorsque vous utilisez PHP pour les opérations de base de données, MySQL_FETCH_ASSOC () et MySQL_NUM_ROWS () sont deux fonctions couramment utilisées, qui sont utilisées pour obtenir respectivement les données à ligne unique de l'ensemble de résultats de requête et le nombre de lignes de l'ensemble de résultats respectivement. Habituellement, nous devons combiner ces deux fonctions pour traiter efficacement les résultats de la requête, en particulier dans le scénario où nous avons besoin non seulement de données de requête, mais aussi d'obtenir le nombre de lignes de résultat.

1. Utilisation de base de mysql_fetch_assoc () et mysql_num_rows ()

Avant de commencer à discuter de la façon de combiner ces deux fonctions, une brève revue de leurs fonctions.

  • mysql_fetch_assoc ($ Résultat) : Obtenez une ligne de données à partir du résultat Résultat $ Result et renvoie un tableau associatif où la clé du tableau est le nom de champ et la valeur est la valeur du champ. Chaque fois qu'il est appelé, la ligne suivante de données dans l'ensemble de résultats est renvoyée jusqu'à la lecture des données.

     <span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>
  • mysql_num_rows ($ Result) : renvoie le nombre de lignes dans l'ensemble de résultats, c'est-à-dire le nombre de lignes contenues dans le résultat de la requête. Il est généralement utilisé pour déterminer si la requête est réussie et déterminer le nombre total de lignes des données avant ou après avoir obtenu les données.

     <span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
    </span></span>

2. Utilisation erronée commune

De nombreux développeurs rencontrent souvent un problème lors de l'utilisation de ces deux fonctions: si mysql_num_rows () est appelé avant d'appeler mysql_fetch_assoc () , alors mysql_num_rows () obtiendra le nombre de lignes dans l'ensemble des résultats, mais après l'appel Mysql_fetch_assoc () , la logique a évolué, donc nous ne pouvons pas obtenir le numéro de Rows de Rows, ce qui a été logique.

3. Comment obtenir efficacement le nombre de lignes et les données?

Pour résoudre le problème ci-dessus, nous pouvons d'abord appeler mysql_num_rows () pour obtenir le nombre de lignes de l'ensemble de résultats, puis utiliser mysql_fetch_assoc () pour lire la ligne de données par ligne. La clé est de savoir comment gérer la position du curseur (pointeur) du résultat de la requête. Voici plusieurs pratiques courantes et efficaces.

1. Calculez d'abord le nombre de lignes, puis traversez l'ensemble de résultats

La méthode la plus courante consiste à utiliser mysql_fetch_assoc () pour lire la ligne de données par ligne après avoir obtenu le nombre de lignes du résultat de la requête. L'avantage de cette méthode est que la quantité totale de données peut être déterminée en premier, ce qui facilite le traitement ultérieur.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$num_rows</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_num_rows</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>); </span><span><span class="hljs-comment">// Obtenez d&#39;abord le nombre de lignes</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les résultats de la requête ont <span class="hljs-subst">{$num_rows}</span></span></span><span> Données de ligne。";

</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-comment">// 处理每一Données de ligne</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"nom d&#39;utilisateur: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}
</span></span>

À l'heure actuelle, mysql_num_rows () calcule d'abord le nombre total de lignes, puis MySQL_Fetch_assoc () lira la ligne de données par ligne. Dans ce cas, puisque le pointeur vers l'ensemble de résultats a déplacé après l'appel MySQL_Fetch_assoc () , le nombre de lignes fourni par MySQL_NUM_ROWS () est utilisé pour afficher le nombre total d'enregistrements et n'est plus lié à l'ordre de lecture de données réel.

2. Utilisez mysql_fetch_assoc () pour obtenir les données et compter

Si vous devez calculer le nombre de lignes pendant la traversée des résultats, vous pouvez compter directement dans mysql_fetch_assoc () sans compter sur mysql_num_rows () . Cette approche s'applique à vous qui ne se soucie pas du nombre total de lignes renvoyées par la base de données, mais ne se soucient que du traitement des données.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;  </span><span><span class="hljs-comment">// Utilisé pour compter</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-comment">// Chaque ligne est lue,Compter un</span></span><span>
    </span><span><span class="hljs-variable">$row_count</span></span><span>++;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"nom d&#39;utilisateur: "</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Les résultats de la requête ont <span class="hljs-subst">{$row_count}</span></span></span><span> Données de ligne。";
</span></span>

Dans cette méthode, nous obtenons chaque ligne de données via mysql_fetch_assoc () et la comptons manuellement via une variable $ ROW_COUNT personnalisée, évitant ainsi le fardeau des performances provoqué par plusieurs appels vers MySQL_NUM_ROWS () .

3. Traitez efficacement les grands ensembles de données (éviter de calculer le nombre total de lignes à l'avance)

Le calcul du nombre total de lignes peut être un fardeau de performances lorsque vous travaillez avec de très grands ensembles de données. Afin d'améliorer l'efficacité, il est préférable d'éviter de compter le nombre de lignes avant de lire les données, mais de traiter directement les données. Vous pouvez utiliser mysql_fetch_assoc () pour traiter les boucles de données et calculer dynamiquement le nombre de lignes.

 <span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>);

</span><span><span class="hljs-variable">$row_count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
    </span><span><span class="hljs-variable">$row_count</span></span><span>++;
    </span><span><span class="hljs-comment">// Traitement des données</span></span><span>
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Il y a un total de <span class="hljs-subst">{$row_count}</span></span></span><span> Données de ligne。";
</span></span>

L'avantage de cette approche est qu'il peut améliorer considérablement les performances lors du traitement des données directement sans effectuer de calculs supplémentaires, en particulier lors de l'interrogation de grands volumes de données.

4. Résumé

  1. Évitez plusieurs appels vers mysql_num_rows () : l'appel vers mysql_num_rows () analysera l'ensemble des résultats, ce qui affectera les performances. Il est préférable de parcourir les données directement via mysql_fetch_assoc () sans nécessiter le nombre total de lignes.

  2. Choisissez un plan en fonction des besoins réels : si vous avez vraiment besoin d'interroger le nombre de lignes, vous pouvez d'abord appeler mysql_num_rows () . Si vous avez juste besoin de traiter chaque ligne de données, vous pouvez les implémenter via mysql_fetch_assoc () et les compter manuellement.

  3. Évitez d'utiliser MySQL_NUM_ROWS () sur de grands ensembles de données : Precalculant le nombre de lignes à l'avance peut apporter des surcharges de performances inutiles lorsque les résultats de la requête sont très importants. La traversée directe des données et le traitement en temps réel est une approche plus efficace.

En utilisant ces deux fonctions raisonnablement, vous pouvez obtenir et traiter plus efficacement les données dans les résultats de la requête, améliorant les performances et la vitesse de réponse du système.