J'ai récemment commencé à travailler sur un nouveau projet utilisant PHP5 et je veux utiliser leurs classes PDO pour cela. Le problème est que le pilote MySQL PDO ne supporte pas rowCount(), donc il n'y a aucun moyen d'exécuter une requête et ensuite obtenir le nombre de lignes affectées, ou les lignes retournées, ce qui est un gros problème en ce qui me concerne. Je me demandais si quelqu'un d'autre a traité de cela auparavant et de ce que vous avez fait pour contourner le problème. Avoir à faire un fetch() ou fetchAll() pour vérifier si des lignes ont été affectées ou retournées me semble être un hack, je préfère faire $ stmt-> numRows() ou quelque chose de similaire.Solution de contournement pour le problème PDO rowCount de PHP5
Répondre
Vous pouvez émettre une requête SELECT FOUND_ROWS()
juste après la requête initiale SELECT
pour obtenir le nombre de lignes.
$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
Voir aussi: MySQL Docs on FOUND_ROWS()
Une question, rowCount() fonctionne bien pour moi, également sur les instructions SELECT. Cela a-t-il été mis en œuvre depuis que cette question a été répondue? – Mattis
@Imran rowCount() fonctionne pour moi aussi pour select ainsi que pour les requêtes comme 'SHOW TABLES LIKE '
rowCount() ne fonctionne que si vous avez déjà effectué un fetchAll(), mais pas si vous utilisez fetch() (c'est une meilleure cause consomme beaucoup moins de mémoire) – itsjavi
Pour ceux d'entre vous qui utilisent des procédures stockées MySQL, cette solution n'est pas vraiment possible. Ce que je suggérerais que vous fassiez, c'est que votre procédure stockée crée deux ensembles de lignes. Le premier contiendra une ligne et une colonne, contenant le nombre d'enregistrements. Le second sera le jeu d'enregistrements que vous utiliserez pour récupérer ce nombre de lignes.
Le nombre de lignes illimités peut être un SELECT COUNT(*)
avec exactement le même WHERE
clause que le deuxième ensemble de lignes sans les clauses LIMIT
/OFFSET
.
Une autre idée pourrait être de créer une table temporaire. Utilisez votre instruction SELECT
pour remplir la table temporaire. Ensuite, vous pouvez utiliser SELECT COUNT(*) FROM tmpTable
pour votre premier jeu de lignes et SELECT * FROM tmpTable
pour votre second.
Ne pensez-vous pas que l'utilisation d'une table temporaire est un peu exagérée pour obtenir un nombre aussi inutile? –
Cette question est basée sur plusieurs fausses hypothèses et une déclaration périmée.
Tout d'abord, ne confondez pas le numéro de affecté et sélectionné lignes. PDO a soutenu le premier même en '09.
En parlant du nombre de lignes retournées par l'instruction SELECT - vous n'avez pas besoin de ce nombre. Les données que vous avez sont suffisantes. Et oui, de nos jours rowCount()
prend également en charge le nombre de lignes sélectionnées à partir de mysql. Mais encore une fois - vous n'avez pas besoin de ce numéro dans une application web moyenne de toute façon.
"Vous n'avez pas besoin de ce numéro, les données que vous avez sont suffisantes". Oh my .. Traduit en "Vous n'avez pas besoin d'une adresse e-mail, il suffit d'avoir un site web!" J'ai presque TOUJOURS besoin de ce numéro, et éviter d'avoir plusieurs requêtes COUNT quand je peux juste compter la requête elle-même. Il est toujours bon de dire à l'utilisateur que "aucune entrée n'a été trouvée" si c'est le cas, au lieu de simplement boucler NOTHING. (En outre, vous ne pouvez pas vérifier si fetch() renvoie true si vous utilisez également une boucle while) – mowgli
- 1. Solution de contournement pour le bogue SSL
- 2. JMenuItem.getRootPane() solution de contournement?
- 3. Solution de contournement pour le bug de langage AS3?
- 4. Solution de contournement poedit pour gettext dynamique
- 5. Solution de contournement pour le bogue de transparence ImageList?
- 6. LinearGradientBrush Artifact Solution de contournement?
- 7. Problème de requête PDO
- 8. Solution de contournement pour les limitations J2ME Hessian?
- 9. Solution de contournement pour la plage TIMESTAMP limitée de MySQL?
- 10. Solution de contournement pour les fonctionnalités php.ini désactivées ---
- 11. Solution de contournement pour MethodBase.GetCurrentMethod() sur Compact Framework 3.5
- 12. Avoir besoin d'une solution de contournement ExtJS
- 13. Solution de contournement pour UpdateSourceTrigger LostFocus sur Datagrid Silverlight?
- 14. Solution de contournement C++/CLI pour l'implémentation d'une interface C++
- 15. solution de contournement pour GWT + Jetty JSP problème du compilateur? (Java 1.5 niveau source non reconnu)
- 16. Bug de positionnement <IE8 - Pourquoi? Meilleure solution de contournement?
- 17. PHP5 include() Problème
- 18. Firefox cacher objet embarqué bug solution de contournement?
- 19. Recherche d'une solution de contournement pour le conflit de noms de fichier avec le fichier d'en-tête Visual C++
- 20. Solution de contournement pour voir si Excel est en mode d'édition de cellule dans .NET
- 21. Existe-t-il une solution de contournement de texte multiligne pour Flex
- 22. Une solution de contournement pour les valeurs d'enrobage Django QueryDict dans les listes?
- 23. Solution de contournement pour les wrappers de collections Java qui interrompent la réflexion
- 24. Exception dans le service Web verrouille DLL et empêche la publication. Solution de contournement?
- 25. Solution de contournement pour la fonction d'index descendant manquante dans MySQL
- 26. Problème lors de l'utilisation de MAMP avec PDO-MySQL
- 27. Quelle est la solution de contournement pour l'exception d'accès mémoire non alignée sur ARM9 utilisant C?
- 28. Quelqu'un a une solution de contournement pour le contrôle de menu aspnet ne rend pas correctement dans ie8?
- 29. Solution de contournement IE pour convertir un document XML en chaîne?
- 30. SQL Rowcount vs Top
Cela ne semble pas être un problème dans PHP 5.4. Quelqu'un peut-il confirmer? – David