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 相关文章推荐
一个分页的论坛
Oct 09 PHP
PHP文件下载类
Dec 06 PHP
PHP Token(令牌)设计
Mar 15 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
PHP开发注意事项总结
Feb 04 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
yii2 resetful 授权验证详解
May 18 PHP
PHP查询分页的实现代码
Jun 09 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 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网站基础优化方法小结
2008/09/29 PHP
PHP mkdir()定义和用法
2009/01/14 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
javascript中Function类型详解
2015/04/28 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
Django的分页器实例(paginator)
2017/12/01 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
解决Python二维数组赋值问题
2019/11/28 Python
keras模型可视化,层可视化及kernel可视化实例
2020/01/24 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python str字符串转uuid实例
2020/03/03 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
四年级数学教学反思
2016/02/16 职场文书