PHP PDOStatement::fetchAll讲解

PDOStatement::fetchAll

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • PHP PDOStatement::rowCount讲解

    PDOStatement::rowCount PDOStatement::rowCount - 返回受上一个 SQL 语句影响的行数(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 int PDOStatement::rowCount ( void ) PDOStatement::rowCount()返回上一个由对应的 PDOStatement 对象执行DELETE. INSERT.或 UPDATE 语句受影响的行数. 如果上一条由相关 PDOStatemen

  • PHP _construct()函数讲解

    PHP _construct() 函数 实例 函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容: <?php $note=<<<XML <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</

  • PHP PDOStatement::fetchColumn讲解

    PDOStatement::fetchColumn PDOStatement::fetchColumn - 从结果集中的下一行返回单独的一列.(PHP 5 >= 5.1.0, PECL pdo >= 0.9.0) 说明 语法 string PDOStatement::fetchColumn ([ int $column_number = 0 ] ) 从结果集中的下一行返回单独的一列,如果没有了,则返回 FALSE . 参数 column_number 你想从行里取回的列的索引数字(以0开始的索

  • PHP PDOStatement::getAttribute讲解

    PDOStatement::getAttribute PDOStatement::getAttribute - 检索一个语句属性(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 mixed PDOStatement::getAttribute ( int $attribute ) 得到语句的一个属性.当前,不存在通用的属性,只有驱动特定的属性: PDO::ATTR_CURSOR_NAME (Firebird 和 ODBC 特性): 获取 UPDATE ...

  • PHP PDOStatement::setAttribute讲解

    PDOStatement::setAttribute PDOStatement::setAttribute - 设置一个语句属性(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 bool PDOStatement::setAttribute ( int $attribute , mixed $value ) 给语句设置一个属性.当前,没有通用的属性可以设置,只有驱动特定的属性: _PDO::ATTR_CURSORNAME (Firebird 和 ODBC 特性

  • PHP addAttribute()函数讲解

    PHP addAttribute() 函数 实例 给根元素和 body 元素添加一个属性: <?php $note=<<<XML <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

  • PHP PDOStatement::fetchObject讲解

    PDOStatement::fetchObject PDOStatement::fetchObject - 获取下一行并作为一个对象返回.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.4) 说明 语法 mixed PDOStatement::fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] ) 获取下一行并作为一个对象返回.此函数(方法)是使用 PDO::FETCH

  • PHP PDOStatement::setFetchMode讲解

    PDOStatement::setFetchMode PDOStatement::setFetchMode - 为语句设置默认的获取模式.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 bool PDOStatement::setFetchMode ( int $mode ) bool PDOStatement::setFetchMode ( int $PDO::FETCH_COLUMN , int $colno ) bool PDOStatement::s

  • PHP PDOStatement::getColumnMeta讲解

    PDOStatement::getColumnMeta PDOStatement::getColumnMeta - 返回结果集中一列的元数据(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 array PDOStatement::getColumnMeta ( int $column ) 检索一个在结果集中以0开始索引的列的元数据作为一个关联数组. 注意:此函数是实验性的.此函数的表象,包括名称及其相关文档都可能在未来的 PHP 发布版本中未通知就被修改.使用

  • PHP PDOStatement::nextRowset讲解

    PDOStatement::nextRowset PDOStatement::nextRowset - 在一个多行集语句句柄中推进到下一个行集(PHP 5 >= 5.1.0, PECL pdo >= 0.2.0) 说明 语法 bool PDOStatement::nextRowset ( void ) 一些数据库服务支持返回一个以上行集(也被称为结果集)的存储过程. PDOStatement::nextRowset()使你能够结合一个 PDOStatement 对象访问第二个以及后续的行集.上

随机推荐