MYSQLI_STORE_RESULT と MYSQLI_USE_RESULT の違い

高洛峰
リリース: 2016-10-10 09:37:28
オリジナル
1268 人が閲覧しました

この記事では、主に PHP の mysqli_query パラメーター MYSQLI_STORE_RESULT と MYSQLI_USE_RESULT の違いを 5 つ紹介しますので、必要な方は参考にしてください

nosql が普及してきましたが、依然として SQL が主流であると感じます。今日php manulを閲覧していて、mysqliクエリが興味深いパラメータを渡すことができることを発見しました

@mysqli_query($this->sql,$SQL,($method ? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT));
ログイン後にコピー

これら2つのパラメータはphp manulで次のように説明されています。

Either the constant MYSQLI_USE_RESULT or MYSQLI_STORE_RESULT depending on the desired behavior. By default, MYSQLI_STORE_RESULT is used.
ログイン後にコピー

何も渡されない場合、デフォルトは MYSQLI_STORE_RESULT になります。

誰かが phpmanul でこう言いました: 大量のデータを取得する必要がある場合は、MYSQLI_USE_RESULT を使用します

実際、これら 2 つのパラメータの違いは依然として非常に大きいです。

(1) 違いは、サーバーから結果セットの行を取得する点です。

(2) MYSQLI_USE_RESULT はクエリを開始しますが、実際には行をフェッチしません
(3) MYSQLI_STORE_RESULT はすぐにすべての行を取得します
(4) MYSQLI_STORE_RESULT 結果セットがサーバーから取得されると、行が抽出され、それらの行にメモリが割り当てられます, クライアントに保存されているため、mysqli_fetch_array() への以降の呼び出しでは、結果セットを既に保持しているデータ構造から行を削除するだけなので、エラーが返されることはありません。NULL を返す Mysqli_fetch_array() は、常に結果セットの終わりを示します。に達しました。
(5) MYSQLI_USE_RESULT 自体は行を取得せず、行ごとの取得を開始するだけです。つまり、行ごとに mysqli_fetch_array() を呼び出して完了する必要があります。そのため、通常の状況では、mysqli_fetch_array() が NULL を返す場合でも、結果セットの最後に到達したことを示しますが、サーバーとの通信中にエラーが発生したことを示す場合もあります。

概要

MYSQLI_USE_RESULT と比較すると、MYSQLI_STORE_RESULT はより多くのメモリと処理要件を必要とします。結果セット全体がクライアント上で保持されるため、複数のデータを取得する場合、メモリの割り当てとデータ構造の作成のコストが非常に大きくなります。 1 回だけ OK、MYSQLI_USE_RESULT が利用可能です。

MYSQLI_USE_RESULT は、毎回処理される単一行に十分なスペースのみが割り当てられるため、メモリ要件が低くなります。結果セット用の複雑なデータ構造を作成する必要がないため、この方が高速です。一方、MYSQLI_USE_RESULT はサーバーに大きな負荷をかけるため、クライアントがすべての行を取得するのに適していると判断されるまで、結果セット内の行を保持する必要があります。


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