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 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 PHP
php使用curl访问https示例分享
Jan 17 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php中memcache 基本操作实例
May 17 PHP
php bootstrap实现简单登录
Mar 08 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
php 的多进程操作实践案例分析
Feb 28 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面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
PHP开发注意事项总结
2015/02/04 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Python中实现的RC4算法
2015/02/14 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
pytorch GAN伪造手写体mnist数据集方式
2020/01/10 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
python -v 报错问题的解决方法
2020/09/15 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
生日庆典策划方案
2014/06/02 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
伏羲庙导游词
2015/02/09 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS