mysqli_fetch_all
MySQLを操作するためのAPI は変更されていません (mysqliおよびPDO拡張)にもかかわらず、mysqli拡張には新しい関数が登場しました。その中でmysqli_fetch_all関数を強調する価値があります。
以前は、完全なサンプル結果を取得するために、同様の構成を記述する必要がありました。
$result = mysqli_query($link, $query); $data = array(); while($row = mysqli_fetch_assoc($result)) { $data[] = $row; }
mysqli_fetch_allを使用する場合、そのような構成の使用を回避できます。
$result = mysqli_query($link, $query); $data = mysqli_fetch_all($result, MYSQLI_ASSOC);
ネイティブメモリ管理
mysqlndはPHPの拡張機能であるため、MySQLで作業するときにメモリ割り当てを制御する(およびmemory_get_usageを使用してメモリ割り当てに関する統計を確認する )機会があります。
つまり、以前は、$データ変数のサイズがスクリプトで指定されたメモリ割り当て制限を超えた場合にのみ、次のスクリプトがメモリ不足になる可能性がありましたが、データベースから受信したデータ量は無限に大きくなる可能性がありました:
ini_set('memory_limit', '1M'); $result = mysqli_query($link, $query); $data = array(); while($row = mysqli_fetch_assoc($result)) { $data[] = $row; }
mysqlndを使用する場合、データベースからのデータ量がスクリプトで指定されたメモリ割り当て制限を超えると、そのようなスクリプトはメモリから落ちます。
ちなみに、mysqlndを使用している場合、LinuxのMySQLサーバーでmax_allowed_packetを超えるリクエストを送信すると、「1153:パケットがmax_allowed_packetバイトよりも大きくなりました」というエラーが表示されます。古いドライバーは「2006:サーバーがなくなった」というエラーを受け取ります。
非同期リクエスト
mysqlndは、MySQLで非同期クエリを実行する方法を提供します。つまり、クエリの結果がスクリプトの実行を継続するのを待つ必要はありません。
非同期クエリを実行するには、mysqli_queryでMYSQLI_ASYNCフラグを指定する必要があります
クエリ結果はmysqli_pollでチェックされ、リクエストが完了した場合、結果はmysqli_reap_async_queryで取得できます(この関数の注意に注意してください)。
残念ながら、非同期クエリを使用することのすべてのニュアンスを完全に理解し、誰かが興味を持っている場合は、非常に近い将来のケースで個別のレビューを提供しようとします。
UPD: mysqlndの非同期クエリに関する私の投稿はここで見ることができます
プラグイン
mysqlndは、非常に便利な拡張機能が生まれたおかげで、プラグインを作成するためのAPIを提供します 。
Mysqlndレプリケーションおよび負荷分散プラグイン
この拡張により、単純な設定を使用して、すべての読み取り要求をスレーブに送信し、要求をマスターに送信することで、MySQLでクエリを自動的に配布できます。
Mysqlndクエリ結果キャッシュプラグイン
この拡張機能を使用すると、最も一般的なキャッシュエンジン(APC、Memcache、SQLite、独自のエンジンを追加できます)のドライバーレベルでクエリ結果をキャッシュできます。
Mysqlndユーザーハンドラプラグイン
この拡張機能は、ドライバーの実行中に実行されるいくつかのフックを提供します。 これらのフックのハンドラーはPHPで記述でき、拡張機能クラスを継承します。