PHP 教程

PDOStatement::fetchAll

时间:2023年05月07日 阅读:383
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

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

本文地址:https://www.momojc.cn/php/pdostateme089.html

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.077 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计