Solution de contournement pour le problème PDO rowCount MySQL de PHP5

StackOverflow https://stackoverflow.com/questions/460010

  •  19-08-2019
  •  | 
  •  

Question

J'ai récemment commencé à travailler sur un nouveau projet utilisant PHP5 et je souhaite utiliser leurs classes PDO. Le problème est que le pilote PDO MySQL ne prend pas en charge rowCount (). Il est donc impossible d'exécuter une requête, puis d'obtenir le nombre de lignes affectées ou de lignes renvoyées, ce qui est un très gros problème en ce qui me concerne. Je me demandais si quelqu'un d'autre avait déjà abordé cette question et ce que vous avez fait pour y remédier. Devoir faire un fetch () ou un fetchAll () pour vérifier si des lignes ont été affectées ou renvoyées me semble être un hack, je préfère simplement faire $ stmt- > numRows () ou quelque chose de similaire.

Était-ce utile?

La solution

Vous pouvez émettre une requête SELECT FOUND_ROWS () juste après la requête SELECT d'origine pour obtenir le nombre de lignes.

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

Voir aussi: Documents MySQL sur FOUND_ROWS ( )

Autres conseils

Pour ceux d'entre vous qui utilisent des procédures stockées MySQL, cette solution n'est pas vraiment réalisable. Ce que je suggère que vous fassiez est que votre procédure stockée crée deux ensembles de lignes. Le premier contient une ligne et une colonne, contenant le nombre d'enregistrements. Le second sera le jeu d’enregistrements que vous utiliserez pour extraire ce nombre de lignes.

Le nombre de lignes illimitées peut être un SELECT COUNT (*) avec exactement la même clause WHERE que le deuxième ensemble de lignes sans le LIMIT / OFFSET .

Une autre idée pourrait être de créer une table temporaire. Utilisez votre instruction SELECT pour remplir la table temporaire. Vous pouvez ensuite utiliser SELECT COUNT (*) FROM tmpTable pour votre premier ensemble de lignes et SELECT * FROM tmpTable pour votre deuxième.

Cette question repose sur plusieurs fausses hypothèses et une déclaration obsolète.

Tout d’abord, ne confondez pas le nombre de lignes affectées et sélectionnées . PDO a pris en charge le premier, même en 2009.

En parlant du nombre de lignes renvoyées par l'instruction SELECT, vous n'avez simplement pas besoin de ce nombre. Les données que vous avez sont suffisantes.

Et oui, de nos jours, rowCount () supporte également le nombre de lignes sélectionnées dans mysql. Mais encore une fois - vous n’avez de toute façon pas besoin de ce nombre dans une application Web moyenne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top