Ding ding ding!
MySQLに接続する場合、PHPはバッファリングされたクエリ を使用するのが好きです。 。これは、接続に使用している方法に関係なく当てはまります。バッファリングされたクエリを使用する場合、要求時にフェッチされるのではなく、結果セット全体がすぐにフェッチされます。これは通常です ラウンドトリップが少ないため、パフォーマンスに優れています。
しかし、PHPのすべてのように、落とし穴があります。バッファリングページに記載されているように:
PHP 5.3を使用しています。これは、mysqlndを使用している可能性が高いことを意味します。
ここで、バッファリングされたクエリをオフにする必要があります。これは、MySQLへのすべてのPHPインターフェースで異なる方法で行われます:
- PDOの場合、
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY
を設定する必要がありますfalse
の属性 。 - mysqliの場合、
MYSQLI_USE_RESULT
を渡す必要がありますquery
に対して定数 メソッド。 - mysqlの場合、
mysql_unbuffered_query
を呼び出す必要がありますmysql_query
の代わりに 。
詳細と例はページにあります。
バッファリングされていない大きな脂肪のクエリの落とし穴!
あなたはしなければならない 別のクエリを発行する前に、ステートメントハンドルを適切に閉じ、結果セットを解放します。
- PDOでは、これは
closeCursor
を呼び出すことを意味します ステートメントハンドル上。 - mysqliでは、これは
free_result
を呼び出すことを意味します ステートメントハンドルまたはfree
作業内容に応じて、結果ハンドルで。 - mysqlでは、これは
mysql_free_result
を呼び出すことを意味します
これを行わないと、エラーが発生します。