이번에는 PHP를 사용하여 mysql을 조작하여 데이터를 읽는 단계에 대해 자세히 설명하겠습니다. PHP가 PDO를 사용하여 mysql을 조작하여 데이터를 읽을 때의 주의 사항은 무엇입니까? 봐.
머리말
이 글은 주로 PDO를 사용하여 mysql에서 대량의 데이터를 읽는 관련 내용을 소개합니다. 참고 및 학습을 위해 공유합니다. 아래에서는 자세히 설명하지 않겠습니다. 자세한 소개에서.
환경
mysql: 5.6.34
php: 5.6
nginx: php-fpm
적용 가능한 시나리오
특정 데이터 세트를 처리해야 함 business
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();
Generator
Generator, 반복 데이터 작업
이 생성기는 생략 가능
코드를 사용해 보세요
class Test { public function test() { 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" : '<br />'; 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"; } public function cursor($sth) { while($row = $sth->fetch(\PDO::FETCH_ASSOC)) { yield $row; } } } $test = new Test(); $test->test();
Output
1 ... //省略部分id 804288 消耗内存:"0.34918212890625M 处理数据行数:254062 success
나는 당신이 본 글의 사례를 읽어보신 후, 더 흥미로운 내용을 보시려면 PHP 중국어 홈페이지의 다른 관련 글도 주목해주세요!
추천 도서:
PHP7.1에서 yaf 확장 기능을 설치하는 단계에 대한 자세한 설명
위 내용은 PHP가 PDO를 사용하여 mysql을 작동하여 데이터를 읽는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!