sql >> データベース >  >> RDS >> Mysql

プリペアドステートメントは、PHPを使用して複数のページの読み込みにわたってサーバー側にキャッシュされますか?

    リクエストが処理されると、phpはインスタンスを「クリーン」にし、リソースやその他の変数を解放します。これはいくつかのステップで行われます。 fastcgiはリクエスト後もプロセスを存続させるため、すべてのステップが実行されるわけではなく、すべてのメモリが解放されるわけでもありません。たとえば、 mysql_pconnect() によって使用されるEG(persistent_list) 、 pg_pconnect() 、...このリストは、プロセスが存続している限り、リクエスト間で空になりません(実際の実装によっては空になる可能性がありますが、EG(persistent_list)の目的に反する可能性があります)。永続的な接続を使用する場合、スクリプトは前のリクエスト中に確立された「再利用」接続を取得する可能性があります。
    プリペアドステートメントを直接(再)使用するには、そのステートメント(およびその接続)の識別子が必要です。 (php-)postgresqlを使用する場合、これは単に pg_execute()<に渡す(接続に関して)一意の文字列です。 / a> 、したがって、スクリプトは、別のインスタンスによって以前に準備されたステートメントにアクセスするのに問題はありません(同じ接続を使用します)。
    mysqli または PDO-mysql ステートメント識別子としてリソース/オブジェクトが必要です。 mysqliもpdo拡張機能も、リクエスト間でEG(persist_list)にリソースを格納する方法を提供していないようであり、再作成することもできないため、これは一種の問題です。 php-fpmがそのような「サービス」を提供しない限り、mysqlのプリペアドステートメントを直接再利用することは不可能のようです。
    期待できるのは、MySQLのサーバー側のクエリキャッシュ 。最近のバージョン(リンクを参照)では、プリペアドステートメントを使用するときにステートメントを認識する場合があります。しかし、それでも実際に準備されたステートメントを再利用することはありません:

    したがって、私が間違っていなければ、現在、phpでの以前のリクエスト中に作成されたmysqlステートメントを再利用することはできません。



    1. MySQLは複数のテーブルから行を削除します

    2. ドロップダウンを使用した場合、SQLインジェクションを防ぐ必要がありますか?

    3. SQLServerでのsp_help_jobscheduleの使用

    4. プロジェクトのメタデータを取得できません。 MSBuildベースの.NETCoreプロジェクトであることを確認してください