downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PDOStatement->fetchColumn> <PDOStatement->fetch
Last updated: Fri, 14 Aug 2009

view this page in

PDOStatement->fetchAll

(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)

PDOStatement->fetchAll Retourne un tableau contenant toutes les lignes du jeu d'enregistrements

Description

array PDOStatement::fetchAll ([ int $fetch_style= PDO::FETCH_BOTH [, int $column_index [, array $ctor_args= array() ]]] )

Liste de paramètres

fetch_style

Contrôle le contenu du tableau retourné comme documenté dans la fonction PDOStatement::fetch(). Vaut par défaut PDO::FETCH_BOTH.

Pour retourner un tableau contenant toutes les valeurs d'une seule colonne depuis le jeu de résultats, spécifiez PDO::FETCH_COLUMN. Vous pouvez spécifier quelle colonne vous voulez avec le paramètre column-index .

Pour récupérer uniquement les valeurs uniques d'une seule colonne depuis le jeu de résultats, utilisez PDO::FETCH_COLUMN avec PDO::FETCH_UNIQUE.

Pour retourner un tableau associatif groupé par les valeurs d'une colonne spécifique, utilisez PDO::FETCH_COLUMN avec PDO::FETCH_GROUP.

column_index

Retourne la colonne indiquée où la valeur de fetch_style est PDO::FETCH_COLUMN. Vaut par défaut 0.

ctor_args

Arguments du constructeur personnalisé de la classe.

Valeurs de retour

PDOStatement::fetchAll() retourne un tableau contenant toutes les lignes du jeu d'enregistrements. Le tableau représente chaque ligne comme soit un tableau de valeurs des colonnes, soit un objet avec des propriétés correspondant à chaque nom de colonne.

L'utilisation de cette méthode pour récupérer de gros jeux de résultats peut augmenter les ressources du système, mais également ces ressources. Plutôt que de récupérer toutes les données et de les manipuler avec PHP, utilisez le serveur de base de données pour manipuler les jeux de résultats. Par exemple, utilisez les clauses WHERE et ORDER BY dans vos requêtes SQL pour restreindre les résultats avant de le récupérer et de les traiter avec PHP.

Exemples

Exemple #1 Récupération de toutes les lignes d'un jeu de résultats

<?php
$sth 
$dbh->prepare("SELECT nom, couleur FROM fruit");
$sth->execute();

/* Récupération de toutes les lignes d'un jeu de résultats */
print("Récupération de toutes les lignes d'un jeu de résultats :\n");
$result $sth->fetchAll();
print_r($result);
?>

L'exemple ci-dessus va afficher :

Récupération de toutes les lignes d'un jeu de résultats :
Array
(
    [0] => Array
        (
            [NOM] => pear
            [0] => pear
            [COULEUR] => green
            [1] => green
        )

    [1] => Array
        (
            [NOM] => watermelon
            [0] => watermelon
            [COULEUR] => pink
            [1] => pink
        )

)

Exemple #2 Récupération de toutes les valeurs d'une seule colonne depuis un jeu de résultats

L'exemple suivant montre comment retourner toutes les valeurs d'une seule colonne depuis un jeu de résultats, même si la requête SQL retourne plusieurs colonnes par lignes.

<?php
$sth 
$dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Récupération de toutes les valeurs de la première colonne */
$result $sth->fetchAll(PDO::FETCH_COLUMN0);
var_dump($result);
?>

L'exemple ci-dessus va afficher :

Array(3)
(
    [0] =>
    string(5) => apple
    [1] =>
    string(4) => pear
    [2] =>
    string(10) => watermelon
)

Exemple #3 Grouper toutes les valeurs d'une seule colonne

L'exemple suivant montre comment retourner un tableau associatif groupé par les valeurs de la colonne spécifiée d'un jeu de résultats. Le tableau contient trois clés : les valeurs apple et pear sont retournées sous la forme de tableaux qui contiennent deux couleurs différentes, tandis que watermelon est retourné sous la forme d'un tableau qui contient uniquement une seule couleur.

<?php
$insert 
$dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple''green'));
$insert->execute(array('pear''yellow'));

$sth $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Grouper les valeurs de la première colonne */
var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
?>

L'exemple ci-dessus va afficher :

array(3) {
  ["apple"]=>
    array(2) {
      [0]=>
        string(5) "green"
      [1]=>
        string(3) "red"
    }
  ["pear"]=>
    array(2) {
      [0]=>
        string(5) "green"
      [1]=>
        string(6) "yellow"
    }
  ["watermelon"]=>
    array(1) {
      [0]=>
        string(5) "green"
    }
}

Voir aussi



PDOStatement->fetchColumn> <PDOStatement->fetch
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
PDOStatement->fetchAll
mxrgus
23-Oct-2009 11:22
In method body:

return $pstmt->fetchAll() or die("bad");

will not return correct value, but "1" instead.
Daniel Hofmann
05-May-2009 07:21
PLEASE BE AWARE: If you do an OUTER LEFT JOIN and set PDO FetchALL to PDO::FETCH_ASSOC, any primary key you used in the OUTER LEFT JOIN will be set to a blank if there are no records returned in the JOIN.

For example:
<?php
//query the product table and join to the image table and return any images, if we have any, for each product
$sql = "SELECT * FROM product, image
LEFT OUTER JOIN image ON (product.product_id = image.product_id)"
;

$array = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($array);
?>

The resulting array will look something like this:

Array
(
    [0] => Array
        (
            [product_id] =>
            [notes] => "this product..."
            [brand] => "Best Yet"
            ...

The fix is to simply specify your field names in the SELECT clause instead of using the * as a wild card, or, you can also specify the field in addition to the *. The following example returns the product_id field correctly:

<?php
$sql
= "SELECT *, product.product_id FROM product, image
LEFT OUTER JOIN image ON (product.product_id = image.product_id)"
;

$array = $stmt->fetchAll(PDO::FETCH_ASSOC);

print_r($array);
?>

The resulting array will look something like this:

Array
(
    [0] => Array
        (
            [product_id] => 3
            [notes] => "this product..."
            [brand] => "Best Yet"
            ...
Ant P.
04-Feb-2009 02:37
You might find yourself wanting to use FETCH_GROUP and FETCH_ASSOC at the same time, to get your table's primary key as the array key:
<?php
// $stmt is some query like "SELECT rowid, username, comment"
$results = $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);

// It does work, but not as you might expect:
$results = array(
   
1234 => array(0 => array('username' => 'abc', 'comment' => '[...]')),
   
1235 => array(0 => array('username' => 'def', 'comment' => '[...]')),
);

// ...but you can at least strip the useless numbered array out easily:
$results = array_map('reset', $results);
?>
davey at php dot net
03-Nov-2008 02:54
When passing PDO::FETCH_CLASS as the first argument, this method will accept the class name as the second option:

<?php
$query
= $pdo->prepare($sql);

$result = $query->execute($values);

if (
$result && $query->rowCount() > 0) {
   
$records = $query->fetchAll(PDO::FETCH_CLASS, 'Some_Class');
   
// $record is now an array of Some_Class objects
}
?>

- Davey
mrshelly at hotmail dot com
31-Oct-2008 03:27
PHP fetchAll Data From SQL Server 2005
if field's data type is varchar(nvarchar), only fetch 255 chars. but the "text" data type is ok.

so, notice! to change the 'varchar' or 'nvarchar' (length > 255) to 'text' data type..

hope to help u.

<?php

$user
= 'sa';
$pass = 'pass';

$conn = new PDO('mssql:host=127.0.0.1; dbname=tempdb;', $user, $pass);

$mainSQL = "SELECT field_varchar, field_text FROM table1";
$sth = $conn->prepare($mainSQL);
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
$retRows = $sth->fetchAll();
// the field_varchar field only to fetch 255 chars(max)
// the field_text is ok.

var_dump($retRows);

unset(
$sth); unset($conn);

?>
harlequin2 at gmx dot de
10-Jun-2008 12:01
There is also another fetch mode supported on Oracle and MSSQL:
PDO::FETCH_ASSOC

> fetches only column names and omits the numeric index.

If you would like to return all columns from an sql statement with column keys as table headers, it's as simple as this:

<?php
$dbh
= new PDO("DS", "USERNAME", "PASSWORD");
$stmt = $dbh->prepare("SELECT * FROM tablename");
$stmt->execute();
$arrValues = $stmt->fetchAll(PDO::FETCH_ASSOC);
// open the table
print "<table wdith=\"100%\">\n";
print
"<tr>\n";
// add the table headers
foreach ($arrValues[0] as $key => $useless){
    print
"<th>$key</th>";
}
print
"</tr>";
// display data
foreach ($arrValues as $row){
    print
"<tr>";
    foreach (
$row as $key => $val){
        print
"<td>$val</td>";
    }
    print
"</tr>\n";
}
// close the table
print "</table>\n";
?>
Anonymous
02-Jan-2008 07:13
If no rows have been returned, fetchAll returns an empty array.
stas at metalinfo dot ru
18-Oct-2006 01:37
Note, that you can use PDO::FETCH_COLUMN|PDO::FETCH_GROUP pair only while selecting two columns, not like DB_common::getAssoc(), when grouping is set to true.

PDOStatement->fetchColumn> <PDOStatement->fetch
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites