Bonjour,
Je viens de me mettre à PDO et je me demandais si il existait un équivalent à mysql_num_rows() car je n'en vois pas dans la doc PHP.
Bien sur je pourrais utiliser une requête avec COUNT() mais ça oblige à faire une 2ème requête...
Merci
Bonjour,
Je viens de me mettre à PDO et je me demandais si il existait un équivalent à mysql_num_rows() car je n'en vois pas dans la doc PHP.
Bien sur je pourrais utiliser une requête avec COUNT() mais ça oblige à faire une 2ème requête...
Merci
La doc préconise une 2e requête SELECT COUNT( ) http://fr.php.net/manual/en/pdostatement.rowcount.php
Autrement tu peux faire un count($statement->fetchAll( ))
Au vu de la réponse de Sèb., je dirais que le plus rapide serait de faire une seconde requête avec un SELECT count()... parce que faire count($statement->fetchAll( )) puis un $statement->fetchAll( ) par la suite revient à faire deux fois la requête, qui si elle renvoit beaucoup de ligne peut ralentir considérablement le traitement.
Google est ton ami mais ton voisin aussi
Modérateur BI - Responsable Talend
Mes tutoriels - FAQ Talend - FAQ SQL*Plus
Avant toute chose : lire le mode d'emploi du forum et ses règles.
Suivez @Developpez sur twitter !
heu il faut evidemment recuperer le resultat du fetchAll()parce que faire count($statement->fetchAll( )) puis un $statement->fetchAll( )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $result = $sth->fetchAll(); $nbre = count($result); foreach ($result as $row) { }
Je pense que la méthode du fetchAll() est la mieux.
Parce que 2 requêtes, sur un serveur qui est déjà assez chargé je pense que ce n'est pas ce qu'il y a de mieux.
C'est vraiment dommage que le rowCount ne renvoi pas la valeur à tous les coups.
D'ailleurs il est écrit que pour certaines BDD, le nombre est renvoyé. Qu'en est il pour MySQL, la valeur est elle renvoyé ? Y a t il quelque chose à paramétrer pour que cela fonctionne ?
Tout dépend de la requête.
Si vous faites de la pagination sur un très gros résultat, par exemple résultats 1-10, 11-20, ... 51-60... sur un total de 500 000 lignes, je vois mal faire un SELECT sur les 500000 lignes puis un count du fetchAll alors que l'on en affiche que 10 ! Dans ce cas il FAUT faire une deuxième requête SELECT COUNT(*), sinon le serveur de base de données et le réseau vont souffrir !
Par contre, si le résultat comporte peu de lignes toutes affichées à l'écran, là effectivement il vaut mieux faire un count sur le tableau renvoyé par fetchAll.
Partager