Latest web development tutorials

PDOStatement::fetchAll

PHP PDO 參考手冊 PHP PDO參考手冊

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 獲取風格的行為。

<?php
class 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 獲取風格的行為。

<?php
function 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"
}

PHP PDO 參考手冊 PHP PDO參考手冊