ホームページ  >  記事  >  バックエンド開発  >  PHP で大量のデータをクエリする際のメモリ不足の問題の解決策

PHP で大量のデータをクエリする際のメモリ不足の問題の解決策

墨辰丷
墨辰丷オリジナル
2018-05-31 09:59:401472ブラウズ

この記事では主に、PHP で大量のデータをクエリする際のメモリ不足の問題の解決策を詳しく紹介します。興味のある方は参考にしてください。ヒント

:

PHP 致命的なエラー: 許容メモリ サイズ 268 435 456 バイトが使い果たされました

この問題は、PHP の公式 Web サイトでは、バッファリングされたクエリとバッファリングされていないクエリと呼ばれています。 PHP のデフォルトのクエリ モードはバッファ モードです。つまり、クエリ データの結果は、PHP プログラムによる処理のために一度にメモリに抽出されます。これにより、PHP プログラムに行数のカウント、特定の行へのポインタの指示などの追加機能が与えられます。さらに重要なことは、プログラムがデータ セットに対して二次クエリとフィルタリング操作を繰り返し実行できることです。ただし、このバッファー クエリ モードの欠点は、メモリを消費すること、つまり、速度と引き換えにスペースを消費することです。

対照的に、別の PHP クエリ モードはバッファなしクエリであり、データベース サーバーはデータを一度に返すのではなく 1 つずつ返します。その結果、PHP プログラムが消費するメモリは少なくなりますが、データベースへの負荷は増大します。これは、すべてのデータがフェッチされるまで、データベースが PHP によるデータのフェッチを待機するためです。

明らかに、バッファー クエリ モードは少量のデータ量のクエリに適しており、非バッファー クエリは大量のデータ量のクエリに適しています。

PHP のバッファー モード クエリについては誰もが知っています。以下に示す例は、非バッファー クエリ API を実行する方法です。

非バッファリング クエリ方法 1:

mysqli

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); 
if ($uresult) { 
  while ($row = $uresult->fetch_assoc()) { 
    echo $row[&#39;Name&#39;] . PHP_EOL; 
  } 
} 
$uresult->close(); 
?>


非バッファリング クエリ方法 2:

pdo_mysql

りー


非バッファクエリ方法 3:

mysql

<?php 
$pdo = new PDO("mysql:host=localhost;dbname=world", &#39;my_user&#39;, &#39;my_pass&#39;); 
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
$uresult = $pdo->query("SELECT Name FROM City"); 
if ($uresult) { 
  while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { 
    echo $row[&#39;Name&#39;] . PHP_EOL; 
  } 
} 
?>


以上がこの記事の全内容です。皆様の学習に役立つことを願っています。


関連する推奨事項:

PHPで16進数のカラーランダムジェネレーター関数を実装する方法


PHPでWebサイトがダウンしているかどうかを確認する方法の例の説明


ログインページ情報の実装PHPのプロンプト関数(分析例)



以上がPHP で大量のデータをクエリする際のメモリ不足の問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。