PHP PDOStatement::fetchAll讲解


Posted in PHP onJanuary 31, 2019

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 相关文章推荐
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
PHP register_shutdown_function函数的深入解析
Jun 03 PHP
php实现读取超大文件的方法
Jul 28 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 PHP
PHP PDOStatement::fetch讲解
Jan 31 #PHP
PHP PDOStatement::execute讲解
Jan 31 #PHP
PHP PDOStatement::errorInfo讲解
Jan 31 #PHP
PHP PDOStatement::errorCode讲解
Jan 31 #PHP
PHP PDOStatement::columnCount讲解
Jan 30 #PHP
PHP PDOStatement::closeCursor讲解
Jan 30 #PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 #PHP
You might like
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
python开发之字符串string操作方法实例详解
2015/11/12 Python
pytorch permute维度转换方法
2018/12/14 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
python脚本定时发送邮件
2020/12/22 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
测试工程师岗位职责
2013/11/28 职场文书
个人党性分析材料
2014/12/19 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
中学教师教学工作总结
2015/08/13 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
goland 恢复已更改文件的操作
2021/04/28 Golang
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript