= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)PDOStatement::fetchAll — 返回一個包含結(jié)果集中所有行的數(shù)組 說明PDOStatement::fetchAll(int $fetch_s">

PDOStatement::fetchAll

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

PDOStatement::fetchAll 返回一個包含結(jié)果集中所有行的數(shù)組

說明

PDOStatement::fetchAll(int $fetch_style = ?, mixed $fetch_argument = ?, array $ctor_args = array()): array

參數(shù)

fetch_style

控制返回?cái)?shù)組的內(nèi)容如同 PDOStatement::fetch() 文檔中記載的一樣。默認(rèn)為 PDO::ATTR_DEFAULT_FETCH_MODE 的值( 其缺省值為 PDO::FETCH_BOTH

想要返回一個包含結(jié)果集中單獨(dú)一列所有值的數(shù)組,需要指定 PDO::FETCH_COLUMN 。通過指定 column-index 參數(shù)獲取想要的列。

想要獲取結(jié)果集中單獨(dú)一列的唯一值,需要將 PDO::FETCH_COLUMNPDO::FETCH_UNIQUE 按位或。

想要返回一個根據(jù)指定列把值分組后的關(guān)聯(lián)數(shù)組,需要將 PDO::FETCH_COLUMNPDO::FETCH_GROUP 按位或。

fetch_argument

根據(jù) fetch_style 參數(shù)的值,此參數(shù)有不同的意義:

  • PDO::FETCH_COLUMN:返回指定以0開始索引的列。

  • PDO::FETCH_CLASS:返回指定類的實(shí)例,映射每行的列到類中對應(yīng)的屬性名。

  • PDO::FETCH_FUNC:將每行的列作為參數(shù)傳遞給指定的函數(shù),并返回調(diào)用函數(shù)后的結(jié)果。

ctor_args

當(dāng) fetch_style 參數(shù)為 PDO::FETCH_CLASS 時,自定義類的構(gòu)造函數(shù)的參數(shù)。

返回值

PDOStatement::fetchAll() 返回一個包含結(jié)果集中所有剩余行的數(shù)組。此數(shù)組的每一行要么是一個列值的數(shù)組,要么是屬性對應(yīng)每個列名的一個對象。

使用此方法獲取大結(jié)果集將導(dǎo)致系統(tǒng)負(fù)擔(dān)加重且可能占用大量網(wǎng)絡(luò)資源。與其取回所有數(shù)據(jù)后用PHP來操作,倒不如考慮使用數(shù)據(jù)庫服務(wù)來處理結(jié)果集。例如,在取回?cái)?shù)據(jù)并通過PHP處理前,在 SQL 中使用 WHERE 和 ORDER BY 子句來限定結(jié)果。

范例

示例 #1 獲取結(jié)果集中所有剩余的行

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

/* 獲取結(jié)果集中所有剩余的行 */
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
        )

)

示例 #2 獲取結(jié)果集中單獨(dú)一列的所有值

下面例子演示了如何從一個結(jié)果集中返回單獨(dú)一列所有的值,盡管 SQL 語句自身可能返回每行多列。

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

/* 獲取第一列所有值 */
$result $sth->fetchAll(PDO::FETCH_COLUMN0);
var_dump($result);
?>

以上例程的輸出類似于:

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

示例 #3 根據(jù)單獨(dú)的一列把所有值分組

下面例子演示了如何返回一個根據(jù)結(jié)果集中指定列的值分組的關(guān)聯(lián)數(shù)組。該數(shù)組包含三個鍵:返回的 applepear 數(shù)組包含了兩種不同的顏色,而返回的 watermelon 數(shù)組僅包含一種顏色。

<?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();

/* 根據(jù)第一列分組  */
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"
  }
}

示例 #4 每行結(jié)果實(shí)例化一個類

下面列子演示了 PDO::FETCH_CLASS 獲取風(fēng)格的行為。

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

示例 #5 每行調(diào)用一次函數(shù)

下面列子演示了 PDO::FETCH_FUNC 獲取風(fēng)格的行為。

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

參見