PHP8 PDOStatement::fetchAll

2024-03-26 09:50 更新

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

PDOStatement::fetchAll — 從結(jié)果集中獲取剩余的行

說明

public PDOStatement::fetchAll(int $mode = PDO::FETCH_DEFAULT): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_COLUMN, int $column): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_CLASS, string $class, ?array $constructorArgs): array
public PDOStatement::fetchAll(int $mode = PDO::FETCH_FUNC, callable $callback): array

參數(shù) 

mode

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

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

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

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

以下是依賴獲取模式的動態(tài)參數(shù)。它們不能與命名參數(shù)一起使用。

column

與 PDO::FETCH_COLUMN 一起使用。返回指定以 0 開始索引的列。

class

與 PDO::FETCH_CLASS一起使用。返回指定類的實例,映射每行的列到類中對應的屬性名。

constructorArgs

當 mode 參數(shù)為 PDO::FETCH_CLASS 時自定義類構(gòu)造方法的參數(shù)。

callback

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

返回值 

PDOStatement::fetchAll() 返回一個包含結(jié)果集中所有剩余行的數(shù)組。此數(shù)組的每一行要么是一個列值的數(shù)組,要么是屬性對應每個列名的一個對象。如果獲取到的結(jié)果為 0,則返回空數(shù)組。

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

錯誤/異常 

如果屬性 PDO::ATTR_ERRMODE 設置為 PDO::ERRMODE_WARNING,則發(fā)出級別為 E_WARNING 的錯誤。

如果屬性 PDO::ATTR_ERRMODE 設置為 PDO::ERRMODE_EXCEPTION,則拋出 PDOException。

更新日志 

版本說明
8.0.0現(xiàn)在此方法始終返回 array,之前可能在失敗時返回 false。

示例 

示例 #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] => apple
            [0] => apple
            [colour] => red
            [1] => red
        )

    [1] => Array
        (
            [name] => pear
            [0] => pear
            [colour] => green
            [1] => green
        )

    [2] => Array
        (
            [name] => watermelon
            [0] => watermelon
            [colour] => pink
            [1] => pink
        )

)

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

下面例子演示了如何從一個結(jié)果集中返回單獨一列所有的值,盡管 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
)

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

下面例子演示了如何返回一個根據(jù)結(jié)果集中指定列的值分組的關(guān)聯(lián)數(shù)組。該數(shù)組包含三個鍵:返回的 apple 和 pear 數(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) "pink"
  }
}

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

下面列子演示了 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"
  }
  [3]=>
  object(fruit)#4 (2) {
    ["name"]=>
    string(5) "apple"
    ["colour"]=>
    string(3) "red"
  }
  [4]=>
  object(fruit)#5 (2) {
    ["name"]=>
    string(4) "pear"
    ["colour"]=>
    string(5) "green"
  }
}

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

下面列子演示了 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"
  [3]=>
  string(10) "apple: red"
  [4]=>
  string(11) "pear: green"
}

參見 

  • PDO::query() - 預處理并執(zhí)行沒有占位符的 SQL 語句
  • PDOStatement::fetch() - 從結(jié)果集中獲取下一行
  • PDOStatement::fetchColumn() - 從結(jié)果集中的下一行返回單獨的一列
  • PDO::prepare() - 預處理要執(zhí)行的語句,并返回語句對象
  • PDOStatement::setFetchMode() - 為語句設置默認的獲取模式


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號