当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用PDO从mysql读取大量数据处理详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-05 16:52:00 浏览: 评论:0 

这篇文章主要给大家介绍了关于PHP使用PDO从mysql读取大量数据处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

本文主要介绍了关于PHP利用PDO从mysql读取大量数据处理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

环境

mysql: 5.6.34

php: 5.6

nginx: php-fpm

适用场景

需要处理一定数据集业务

从mysql读取一定数据的业务导出

一次需要处理一定的mysql业务操作更新删除等

更多需要处理一定数据集的操作

pdo 关键设置

  1. $dbh = new \PDO($dsn$user$pass); 
  2. # 关键设置,如果不设置,php依旧会从pdo一次取出数据到php 
  3. $dbh->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
  4. //perpare里的游标属性不是必须的 
  5. $sth = $dbh->prepare("SELECT * FROM `order`"array(\PDO::ATTR_CURSOR => \PDO::CURSOR_SCROLL)); 
  6. $sth->execute(); 

生成器

生成器,迭代数据操作

本生成器可省略

尝试代码

  1. class Test { 
  2.  public function test() 
  3.  { 
  4.   set_time_limit(0); 
  5.   $dbms='mysql';  //数据库类型 
  6.   $host=C('DB_HOST'); //数据库主机名 
  7.   $dbName=C('DB_NAME'); //使用的数据库 
  8.   $user=C('DB_USER');  //数据库连接用户名 
  9.   $pass=C('DB_PWD');   //对应的密码 
  10.   $dsn="$dbms:host=$host;dbname=$dbName"
  11.   $dbh = new \PDO($dsn$user$pass); 
  12.   $dbh->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
  13.   $sth = $dbh->prepare("SELECT * FROM `order`"); 
  14.   $sth->execute(); 
  15.   $i = 0; 
  16.  
  17.   $newLine = PHP_SAPI == 'cli' ? "\n" : '<br />'
  18.  
  19.   foreach ($this->cursor($sthas $row) { 
  20. //   var_dump($row); 
  21.    echo $row['id'] . $newLine
  22.    $i++; 
  23.   } 
  24.  
  25.   echo "消耗内存:" . (memory_get_usage() / 1024 / 1024) . "M" . $newLine
  26.   echo "处理数据行数:" . $i . $newLine
  27.   echo "success"
  28.  } 
  29.  
  30.  public function cursor($sth
  31.  { 
  32.   while($row = $sth->fetch(\PDO::FETCH_ASSOC)) { 
  33.    yield $row
  34.   } 
  35.  } 
  36.  
  37. $test = new Test(); 
  38. $test->test(); 

输出

  1. ... //省略部分id 
  2. 804288 
  3. 消耗内存:"0.34918212890625M 
  4. 处理数据行数:254062 
  5. success

Tags: PDO mysql读取大量数据

分享到: