データベース操作にMySQLI拡張機能を使用する場合、 mysqli_stmt :: store_resultおよびmysqli_stmt :: fetchは2つの一般的な関数です。多くの開発者は、これらの2つの関数を使用するときに連続呼び出しに遭遇する場合があります。これは、呼び出しの順序がパフォーマンスと結果に直接影響を与えるためです。
この記事では、これらの2つの機能の役割と、それらを正しく使用する方法をよりよく理解するのに役立つ呼び出し順序を掘り下げます。
mysqli_stmt :: store_result関数は、クエリ結果をクライアントメモリに保存するために使用されます。通常、クエリが実行され、結果が取得される前に呼び出されます。この関数を使用する利点は、すべてのクエリ結果を一度にメモリにロードし、複数の後続のアクセスを促進することです。
mysqli_stmt :: fetch関数は、実行されたクエリ結果セットから単一の結果行を取得するために使用されます。 Fetch to Fetchの各呼び出しは、使用可能な行がなくなるまで、Query Resultセットのデータの行を返します。
mysqli_stmt :: fetchおよびmysqli_stmt :: store_resultはどちらもクエリ結果を処理するための重要な関数ですが、通話の順序は重要です。正しい注文は次のとおりです。
SQLクエリを実行してください: MySQLI_STMT ::実行してクエリを実行します。
次に、 Store_Resultを呼び出します:結果セットをサーバー側からクライアントメモリにバッファリングし、結果に複数回安全にアクセスできるようにします。
最後に、フェッチは次のように呼ばれます。データ列ごとに抽出します。
クエリのバッファリング結果:
store_result関数は、サーバー側の結果をクライアントメモリにバッファリングします。 Fetchが呼び出される前にStore_Resultが呼び出されない場合、MySQLはデフォルトでクライアントにデータ行ごとに送信します。これにより、結果がサーバー側ですでに閉じているため、結果セットに複数回アクセスできない場合があります。
結果の完全な読み取りを確認してください:
store_resultを呼び出した後、すべてのクエリ結果がメモリに引き込まれ、フェッチ関数はラインごとにデータ行を安全に読み取ることができます。 Store_Resultがなければ、特にクエリが複数の結果を返す場合、データがアクセスできない問題に問題が発生する可能性があります。
パフォーマンスの最適化:
クエリの結果が多数あり、 Store_Resultを呼び出さない場合、MySQLはクライアントの結果を1行ごとに送信します。これにより、サーバーとクライアントの間の通信負担が増加し、パフォーマンスに影響します。したがって、 store_resultを呼び出すと、クエリの結果に複数回アクセスする必要がある場合、パフォーマンスを大幅に向上させることができます。
store_resultを呼び出して逆にフェッチする場合、たとえば、 store_resultを最初に呼び出すことなく直接フェッチを呼び出す場合、次の問題に遭遇する場合があります。
結果セットは空です。Fetchが呼び出されたときにStore_Resultが実行されない場合、結果セットにアクセスできない場合があります。特にクエリが大規模なデータセットを返す場合、MySQLはFetchを呼び出すときにサーバー側から[行ごとにデータ]を取得しようとしますが、正しくキャッシュされていない場合、データが抽出されます。
パフォーマンスの劣化:フェッチへの各呼び出しには、データベースサーバーとの通信が必要であり、特にデータの量が多い場合はパフォーマンスに影響を与える可能性があります。
正しい通話順は次のとおりです。
mysqli_stmt :: execute queryを実行します。
mysqli_stmt :: store_resultは結果セットをキャッシュします。
mysqli_stmt :: fetchは、行ごとにデータ行を取得します。
この順序で呼び出すと、クエリ結果の正確性が確実になり、パフォーマンスが最大化されます。開発プロセス中に、不必要なエラーやパフォーマンスボトルネックを避けるために、常にこの順序で関数を呼び出すことをお勧めします。