JeuWeb - Crée ton jeu par navigateur
[PDO] count avec fetch et fetchAll - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PDO] count avec fetch et fetchAll (/showthread.php?tid=4852)



[PDO] count avec fetch et fetchAll - php_addict - 28-05-2010

bonjour

avec PDO (et mysql) j'utilise 2 types de code pour récupérer les données de ma base mysql:

Avec fetch pour récupérer une seule ligne
Code :
$result=$connexion_mmorpg->query("SELECT id FROM table    WHERE id=1");
$donnees=$result->fetch(PDO::FETCH_ASSOC);

Avec fetchAll pour récupérer plus qu'une seule ligne
Code :
$result=$connexion_mmorpg->query("SELECT id FROM table    WHERE id=1");
$donnees=$result->fetchAll(PDO::FETCH_ASSOC);

pour connaitre le nombre de lignes retournées après un SELECT, si j'ai bien compris:

avec fetch faut utiliser la function FOUND_ROWS() de mysql
avec fetchAll faut utiliser la function count() de php

j'ai bon?

n'y a t il pas un moyen d'utilier la meme function dans les 2 cas (fetch et fetchAll) ?

c'est ennuyeux...

faîtes de beaux rêves Wink

PS: RowCount (PDOStatement::rowCount) semble fonctionner dans les 2 cas mais la doc de PDO précise que ce n'est valable qu'aprés une requête DELETE, INSERT, ou UPDATE mais pas après un SELECT (sauf que dans mon cas cela semble quand même fonctionner...)


RE: [PDO] count avec fetch et fetchAll - Sephi-Chan - 28-05-2010

Je comprends pas le problème… Quand tu fais un simple fetch, tu sais très bien que si tu as un retour, il est unique. Puisque c'est le principe même de cette méthode, de ne retourner qu'une ligne.

Et pour fetchAll, tu as la méthode count.


Quel est le problème ?


Sephi-Chan


RE: [PDO] count avec fetch et fetchAll - QuentinC - 28-05-2010

IL y a la méthode rowCount
http://fr.php.net/manual/en/pdostatement.rowcount.php


RE: [PDO] count avec fetch et fetchAll - php_addict - 28-05-2010

(28-05-2010, 12:38 AM)Sephi-Chan a écrit : Je comprends pas le problème… Quand tu fais un simple fetch, tu sais très bien que si tu as un retour, il est unique. Puisque c'est le principe même de cette méthode, de ne retourner qu'une ligne.

en fait non: si tu fais un SELECT sur une ligne qui n'existe pas ou plus...avec fetch tu as comme retour bool(false) et avec fetchall en retour tu aurais array(0) { }

ma question etait "comment tester le nombre de ligne retournée de la meme maniere dans les 2 cas"

(28-05-2010, 05:52 AM)QuentinC a écrit : IL y a la méthode rowCount
http://fr.php.net/manual/en/pdostatement.rowcount.php

merci mais rowcount ne marche pas pour les SELECT lors d'un fetch


je pense avoir trouvé: je vais me faire une petite fonction avec is_array() et is_bool() et count()

merci quand même et désolé si je n'ai pas été très clair...

bonne journée


RE: [PDO] count avec fetch et fetchAll - php_addict - 28-05-2010

re-bonjour

pouvez vous me dire si je me trompes dans mon code svp:

1) trouver le nb d'éléments lors d'un SELECT avec ->fetch

Code :
$result=$connexion_mmorpg->query("SELECT id,pseudo FROM mmorpg.joueur WHERE id=1546");
$donnees=$result->fetch(PDO::FETCH_NUM);

if($donnees===FALSE){echo 'AUCUN';}
if($donnees!==FALSE){echo 'TROUVE';}

2) trouver le nb d'éléments lors d'un SELECT avec ->fetchAll

Code :
$result=$connexion_mmorpg->query("SELECT id,pseudo FROM mmorpg.joueur WHERE id=1");
$donnees=$result->fetchAll(PDO::FETCH_NUM);

if(count($donnees)>=1){echo 'TROUVE';}
if(count($donnees)==0){echo 'AUCUN';}

3) trouver le nb d'éléments lors d'un SELECT COUNT sans pour autant récupérer de données

pour ce coup là, je n'en suis pas vraiement certain: (j'ai lu le code de http://stackoverflow.com/questions/883365/count-with-pdo mais il semble y avoir une erreur car il utilise un count() sur un fetchColumn() ...)

Code :
$result=$connexion_mmorpg->query("SELECT COUNT(id) FROM mmorpg.joueur");
$num_rows=$result->fetchColumn();

echo 'nombre: ' . $num_rows;


j'ai bon? y a t il quelques chose qui vous choque?


merci de m'avoir lu