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缓存类代码(附详细说明)
Jun 09 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
php读取mysql中文数据出现乱码的解决方法
Aug 16 PHP
小谈php正则提取图片地址
Mar 27 PHP
php利用curl抓取新浪微博内容示例
Apr 27 PHP
PHP 快速排序算法详解
Nov 10 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
php实现微信公众号无限群发
Oct 11 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
joomla数据库操作示例代码
Jan 06 PHP
php技巧小结【推荐】
Jan 19 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 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
symfony表单与页面实现技巧
2015/01/26 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
js类 from qq
2006/11/13 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
原生JS实现留言板
2020/03/26 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
Python SQLite3简介
2018/02/22 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python 字符串池化的前提
2020/07/03 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
Python常用外部指令执行代码实例
2020/11/05 Python
Python中常用的os操作汇总
2020/11/05 Python
python实现图片转字符画
2021/02/19 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
护士自我鉴定怎么写
2014/02/07 职场文书
餐饮营销方案
2014/02/23 职场文书
节能减排倡议书
2014/04/15 职场文书
实验心得体会
2014/09/05 职场文书
授权收款委托书范本
2014/10/10 职场文书
2014年教师工作总结
2014/11/10 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
MySQL数据库表约束讲解
2022/06/21 MySQL