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 保留小数点
Apr 21 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
php删除文件夹及其文件夹下所有文件的函数代码
Jan 23 PHP
Zend的MVC机制使用分析(二)
May 02 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP会话处理的10个函数
Aug 11 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
基于php编程规范(详解)
Aug 17 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
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php实现encode64编码类实例
2015/03/24 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
通过C++学习Python
2015/01/20 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python函数参数分类原理详解
2020/05/28 Python
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
半年思想汇报
2013/12/30 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
会计试用期自我评价
2015/03/10 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
python区块链持久化和命令行接口实现简版
2022/05/25 Python