PHP使用PDO从mysql读取大量数据处理详解
前言
本文主要介绍了关于PHP利用PDO从mysql读取大量数据处理的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
环境
- mysql:5.6.34
- php:5.6
- nginx:php-fpm
适用场景
需要处理一定数据集业务
- 从mysql读取一定数据的业务导出
- 一次需要处理一定的mysql业务操作更新删除等
- 更多需要处理一定数据集的操作
pdo关键设置
$dbh=new\PDO($dsn,$user,$pass); #关键设置,如果不设置,php依旧会从pdo一次取出数据到php $dbh->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false); //perpare里的游标属性不是必须的 $sth=$dbh->prepare("SELECT*FROM`order`",array(\PDO::ATTR_CURSOR=>\PDO::CURSOR_SCROLL)); $sth->execute();
生成器
生成器,迭代数据操作
本生成器可省略
尝试代码
classTest{ publicfunctiontest() { set_time_limit(0); $dbms='mysql';//数据库类型 $host=C('DB_HOST');//数据库主机名 $dbName=C('DB_NAME');//使用的数据库 $user=C('DB_USER');//数据库连接用户名 $pass=C('DB_PWD');//对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; $dbh=new\PDO($dsn,$user,$pass); $dbh->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false); $sth=$dbh->prepare("SELECT*FROM`order`"); $sth->execute(); $i=0; $newLine=PHP_SAPI=='cli'?"\n":'
'; foreach($this->cursor($sth)as$row){ //var_dump($row); echo$row['id'].$newLine; $i++; } echo"消耗内存:".(memory_get_usage()/1024/1024)."M".$newLine; echo"处理数据行数:".$i.$newLine; echo"success"; } publicfunctioncursor($sth) { while($row=$sth->fetch(\PDO::FETCH_ASSOC)){ yield$row; } } } $test=newTest(); $test->test();
输出
1 ...//省略部分id 804288 消耗内存:"0.34918212890625M 处理数据行数:254062 success
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。