PHP で非バッファリング モードを使用してデータベースにクエリを実行する方法

墨辰丷
リリース: 2023-03-28 08:06:01
オリジナル
1550 人が閲覧しました

バッファされたクエリとバッファされていないクエリ。 PHP のデフォルトのクエリ モードはバッファ モードです。つまり、クエリ データの結果は、PHP プログラムで処理するために一度にメモリに抽出されます。必要な友人はそれを参照できます

最近、PHP プログラムの開発中に次のエラーが発生しました:

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

エラー メッセージは、最大許容メモリが使い果たされたことを示しています。最初はこのようなエラーが発生したことに驚きましたが、よく考えてみると、私が開発しているプログラムは foreach ループ ステートメントを使用して 40,000 レコードのデータを持つテーブル内の特定の特性を検索することになっているため、驚くべきことではありません。つまり、一度に4万件のデータを取り出し、毎日のデータを1つずつチェックする必要があります。 40,000 個のデータがすべてメモリに読み込まれていると考えられます。メモリがバーストしないのは不思議です。

結局のところ、私は長年プログラミングをしてきましたが、PHP はデータを一度に読み込まない API を提供していることを漠然と覚えています。それは、ストリーミングメディアのように使用したり失くしたりする可能性のあるクエリメソッドであり、データです。記憶に蓄積されない。簡単に検索したところ、公式Webサイトに正しい使用方法が見つかりました。バッファされたクエリとバッファされていないクエリ。 PHP のデフォルトのクエリ モードはバッファ モードです。つまり、クエリ データの結果は、PHP プログラムによる処理のために一度にメモリに抽出されます。これにより、PHP プログラムに行数のカウント、特定の行へのポインタの指示などの追加機能が与えられます。さらに重要なことは、プログラムがデータ セットに対して二次クエリとフィルタリング操作を繰り返し実行できることです。ただし、このバッファー クエリ モードの欠点は、メモリを消費することです。

もう 1 つの PHP クエリ モードは、データベース サーバーが一度にデータを返すのではなく、1 つずつデータを返すことにより、PHP プログラムが消費するメモリは少なくなりますが、データベースの負荷が増加するためです。すべてのデータが取得されるまで、PHP がデータを取得するのを待ちます。

非バッファー クエリ メソッド 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


<?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;
  }
}
ログイン後にコピー


非バッファー クエリ メソッド 3:


りー


以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。


関連する推奨事項:

php、mysqlqueryday、query今週、query今月の詳細なデータ例

PHPqueでの非バッファリングモードの使用ryデータベースメソッド

php は、query と複数条件 query

を実装します。

以上がPHP で非バッファリング モードを使用してデータベースにクエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート