バッファされたクエリとバッファされていないクエリ。 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['Name'] . PHP_EOL; } } $uresult->close();
非バッファー クエリ メソッド 2: pdo_mysql
<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $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['Name'] . PHP_EOL; } }
非バッファー クエリ メソッド 3:
以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。
関連する推奨事項:
php、mysqlqueryday、query今週、query今月の詳細なデータ例
PHPqueでの非バッファリングモードの使用ryデータベースメソッド
を実装します。
以上がPHP で非バッファリング モードを使用してデータベースにクエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。