PDOStatement::fetchAll — 傳回一個包含結果集中所有行的陣列(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
array PDOStatement::fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
fetch_style
控制下一行如何回傳給呼叫者。此值必須是PDO::FETCH_* 系列常數中的一個,缺省為PDO::ATTR_DEFAULT_FETCH_MODE 的值(預設為PDO::FETCH_BOTH )。
想要傳回一個包含結果集中單獨一列所有值的陣列,需要指定PDO::FETCH_COLUMN 。透過指定column-index 參數取得想要的欄位。
想要取得結果集中單獨一列的唯一值,需要將PDO::FETCH_COLUMN 和PDO::FETCH_UNIQUE 按位或。
想要傳回一個根據指定列把值分組後的關聯數組,需要將PDO::FETCH_COLUMN 和PDO::FETCH_GROUP 按位或。
fetch_argument根據fetch_style 參數的值,此參數有不同的意義:
PDO::FETCH_COLUMN
:傳回指定以0開始索引的欄位。
PDO::FETCH_CLASS
:傳回指定類別的實例,將每行的列映射到類別中對應的屬性名稱。
PDO::FETCH_FUNC
:將每行的列作為參數傳遞給指定的函數,並傳回呼叫函數後的結果。
ctor_args當fetch_style 參數為PDO::FETCH_CLASS 時,自訂類別的建構子的參數。
PDOStatement::fetchAll() 傳回一個包含結果集中所有剩餘行的陣列。此數組的每一行要麼是一個列值的數組,要麼是屬性對應每個列名的一個物件。
使用此方法取得大結果集將導致系統負擔加重且可能佔用大量網路資源。與其取回所有資料後用PHP來操作,不如考慮使用資料庫服務來處理結果集。例如,在取回資料並通過PHP處理之前,在SQL 中使用WHERE 和ORDER BY 子句來限定結果。
<?php$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 取得結果集中所有剩餘的行*/print("Fetch all of the remaining rows in the result set:n");$result = $sth->fetchAll();print_r($result);?>
以上實例的輸出為:
Fetch all of the remaining rows in the result set:Array( [0] => Array ( [NAME] => pear [0] => pear [COLOUR] => green [1] => green ) [1] => Array ( [NAME] => watermelon [0] => watermelon [COLOUR] => pink [1] => pink ))
以下範例示範如何從一個結果集中傳回單獨一列所有的值,儘管SQL 語句本身可能會傳回每行多列。
<?php$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();/* 取得第一列所有值*/$result = $sth->fetchAll(PDO ::FETCH_COLUMN, 0);var_dump($result);?>
以上實例的輸出為:
Array(3)( [0] => string(5) => apple [1] => string(4) => pear [2] => string(10) => watermelon)
下面範例示範如何傳回一個根據結果集中指定列的值分組的關聯數組。此陣列包含三個按鍵:傳回的apple 和pear 陣列包含了兩種不同的顏色,而傳回的watermelon 陣列僅包含一種顏色。
<?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();/* 根據第一列分組*/var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));?>
以上實例的輸出為:
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" }}
下面列子示範了PDO::FETCH_CLASS 取得風格的行為。
<?phpclass fruit { public $name; public $colour;}$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute();$result = $sth->fetchAll( PDO::FETCH_CLASS, "fruit");var_dump($result);?>
以上實例的輸出為:
array(3) { [0]=> object(fruit)#1 (2) { ["name"]=> string(5) "apple" ["colour"]=> string(5) "green" } [ 1]=> object(fruit)#2 (2) { ["name"]=> string(4) "pear" ["colour"]=> string(6) "yellow" } [2]=> object(fruit)#3 (2) { ["name"]=> string(10) "watermelon" ["colour"]=> string(4) "pink" }}
下面列子示範了PDO::FETCH_FUNC 取得風格的行為。
<?phpfunction fruit($name, $colour) { return "{$name}: {$colour}";}$sth = $dbh->prepare("SELECT name, colour FROM fruit");$sth->execute ();$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");var_dump($result);?>
以上實例的輸出為:
array(3) { [0]=> string(12) "apple: green" [1]=> string(12) "pear: yellow" [2]=> string(16) "watermelon: pink"}