2010-02-21 7 views
13

J'ai ceci:nombre de lignes d'une instruction Select

$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFilename", $username, $password); 

$sql = "SELECT * FROM this_table"; 

$stmt = $dbh->query($sql); 

//num of rows? 

Comment puis-je obtenir le nombre de lignes renvoyées de cette instruction SELECT?

Merci à tous

Répondre

5

J'ai trouvé une solution, en utilisant fetchAll, puis en utilisant count sur ce tableau - ce que MySQL fait de toute façon en interne, un peu inefficace mais ça marche pour moi.

$q = $db->query("SELECT ..."); 
$rows = $q->fetchAll(); 
$rowCount = count($rows); 

D'une autre question Chad fourni cette idée:

Il semble que la seule raison cela était possible avec MySQL est car il alla chercher à l'intérieur de toutes les lignes de résultat et les tamponne, à être capable de vous donner cette information. Voir mysql_unbuffered_query(). Si vous utilisez cette fonction au lieu de mysql_query(), la fonction mysql_num_rows() ne fonctionnera pas. Si vous avez vraiment besoin de connaître le nombre de lignes alors que en utilisant PDO, vous pouvez récupérer toutes les lignes de PDO dans un tableau, puis utiliser count().

Espérons que cela soit utile à quelqu'un.

+0

Salut, avez-vous un lien vers la question que vous avez mentionnée? Merci tho – James

+15

C'est une idée ** BAD **. Que faire si votre SELECT renvoie des millions de lignes? – Jrgns

+0

Comment Count (*) serait-il meilleur en performance? – devXen

8

SELECT count(*) FROM this_table est une option ...

En ce qui concerne rowCount:

PDOStatement :: rowCount retourne() le nombre de lignes affectées par la dernière requête DELETE, INSERT, ou UPDATE exécuté par l'objet PDOStatement correspondant. Si la dernière instruction SQL exécutée par l'instruction PDOS associée était une instruction SELECT, certaines bases de données peuvent renvoyer le nombre de lignes renvoyées par cette instruction. **

Toutefois, ce comportement n'est pas garanti pour toutes les bases de données et ne doit pas être utilisé pour les applications portables.

+0

Je ne souhaite pas exécuter une autre requête. – Abs

+1

Ce lien peut être utile: http://php.net/manual/fr/pdostatement.rowcount.php –