重複の可能性:
準備されたステートメントは、PHP を使用して複数のページが読み込まれる間、サーバー側でキャッシュされますか?
私は新しいプロジェクトに取り組んでおり、パラメーター化されたクエリを初めて使用しています (PHP と MySQL DB)。パラメータ化されたクエリがキャッシュされていることを読みましたが、キャッシュされている期間が気になります。たとえば、ユーザー テーブルからすべてのアクティブなユーザー ID のリストを取得する関数「getAllUsers()」があり、ID ごとにユーザー オブジェクトが作成され、関数「getUser($user)」が呼び出されるとします。オブジェクトの他のプロパティを設定するために作成されました。「getUser()」関数には、関数の最後に stmt->close() を持つ独自の準備済みクエリがあります。
このようにすると、'getUser()' のパラメーター化されたクエリはキャッシュをまったく利用できますか、それとも stmt->close() のたびにクエリがキャッシュから破棄されますか?
注: ページが 1 つのユーザー オブジェクトのデータのみを必要とする場合も getUser() 関数を使用するので、ユーザー テーブルが変更された場合にクエリを 1 つだけ更新する必要があることを確認するために、この方法で実行したいと考えました。
これはこのようなことをする正しい方法ですか、それとももっと良い方法がありますか?
更新: 興味深いことに、php.net の準備済みステートメントのマニュアル ( http://php.net/manual/en/mysqli.quickstart.prepared-statements.php )でこれを見ました。
準備済みステートメントを使用することが、ステートメントを実行する最も効率的な方法であるとは限りません。一度だけ実行される準備されたステートメントは、準備されていないステートメントよりも多くのクライアントとサーバーのラウンドトリップを引き起こします。
したがって、パラメーター化されたクエリの主な利点は、SQL インジェクションから保護することであり、一度に繰り返されるクエリでない限り、必ずしも高速化することではないと思います。