PHP PDOStatement::fetchAll讲解

作者:php参考手册 时间:2023-06-14 15:54:26 

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"
}
标签:php,pdostatement,fetchall
0
投稿

猜你喜欢

  • PHP中soap的用法实例

    2023-11-14 09:40:24
  • 详细解读Python中的__init__()方法

    2023-03-25 17:10:27
  • 基于Python新建用户并产生随机密码过程解析

    2021-08-26 11:25:18
  • python中WSGI是什么,Python应用WSGI详解

    2021-04-08 06:07:45
  • sqlserver 2000中创建用户的图文方法

    2012-03-26 18:26:39
  • 查看django执行的sql语句及消耗时间的两种方法

    2021-03-28 13:33:48
  • python logging模块的使用总结

    2021-11-15 06:46:53
  • 如何创建一个Flask项目并进行简单配置

    2023-08-19 01:05:47
  • Python实现扫码工具的示例代码

    2022-07-06 06:06:36
  • Vue插槽原理与用法详解

    2024-05-09 10:43:09
  • Linux 下 Python 实现按任意键退出的实现方法

    2022-08-07 14:22:01
  • js实现圆形菜单选择器

    2023-09-23 19:50:54
  • jmeter正则表达式实例详解

    2023-05-20 09:12:12
  • Python网络编程之ZeroMQ知识总结

    2022-07-06 20:16:25
  • python语言time库和datetime库基本使用详解

    2022-11-15 08:59:08
  • 如何利用JS将手机号中间四位变成*号

    2024-02-23 20:07:51
  • 详解model.train()和model.eval()两种模式的原理与用法

    2021-03-20 08:46:56
  • 一文搞懂MySQL索引所有知识点

    2024-01-27 14:01:43
  • Jupyter notebook远程访问服务器的方法

    2022-12-25 22:04:36
  • Python实现脚本锁功能(同时只能执行一个脚本)

    2023-10-03 00:55:51
  • asp之家 网络编程 m.aspxhome.com