2012-04-17 8 views
0

PDOとMySQLを使用している場合、同じページで複数回使用することがわかっている結果をキャッシュする利点はありますか?あるいは、PDO/MySQLはこの種のことを自動的に処理しますか?PDOとキャッシング、データベースクラスでの実装方法

もし私が自分でそれをやるべきであれば、実際の結果をクエリから保​​存するか、PDOStatementをキャッシュに保存して再利用すればいいですか?

もちろん、私は変数のページで何度も使うつもりの結果を保存することができますが、データベースクラスがこのようなことを透過的に処理できるようにするのはよりクリーンです。たとえば、$ DB-> get_username_by_id($ id)を呼び出すことができ、DBからまたはキャッシュから直接来ているかどうかを心配する必要はありません。

もし私が自分のデータベースクラスを作る考えを放棄したいのであれば、あなたの誰かが、PDOで動作する超軽量で使いやすく、効果的で多目的なものを共有ホスト...

+0

は、ページ全体で使用する変数に ')(' $ DB-> get_username_by_idの結果を保持することはできますか?そうでない場合は、Userクラスとシングルトンパターンを考慮してください。 –

+0

このソリューションでキャッシュを実装するにはどうすればよいですか? USERクラスを作成しても、USERクラスまたはDBクラスのいずれかでキャッシュを管理する必要があります。私はあなたが意味することは、USERクラスがキャッシュを処理する必要があると思いますか?それはうまくいくでしょうが、DBクラスにすべての機能を組み込むのがよりクリーンで論理的です。 – BadCash

答えて

0

あなたが本当に良い言い訳をしていない限り、井戸は常にカスタムの上に既存のライブラリを使用することをお勧めします。この場合、IDはDoctrine DBALと言っています。データを保持するためにオブジェクトを使用していないようです。完全なOOPルートに行き、特定のオブジェクトにデータをマップしたい場合は、フルDoctrine ORMと一緒に行きます。

+0

私はDBALのドキュメントを見ましたが、PDOを直接使用するのではなく、これを使用することのメリットはまだ分かりません。ドキュメントにキャッシュに関する情報が見つかりませんでしたか? PDOだけではなく、何らかの結果キャッシングを実装していますか? – BadCash

+0

私は実際に(あなたが探しているものに関して)結果キャッシングがPDOに組み込まれていることを知りませんでした。 Doctrineがその周りのインターフェースをラップすると仮定しているとすれば。私は、ORMにキャッシュを使用する能力があることを知っています。おそらく、これはORMレイヤの代わりにDBALレイヤで行われたと誤って想定されていました。 – prodigitalson

2

これはあなたがしてPDOをPDOを使用している場合::あなたPHP PDO Caching

を助ける準備ができあなたの友達です:PDOを呼び出す

::(準備)とはPDOStatement ::実行()が発行されます文について異なるパラメータ値を複数回使用することで、ドライバはクエリプランとメタ情報のクライアント側および/またはサーバー側のキャッシングをネゴシエートでき、手動でパラメータを引用する必要がなくなり、SQLインジェクション攻撃を防止できます。

http://php.net/manual/en/pdo.prepare.php

+0

異なるパラメータ値を持つ同じ文を発行するときにprepare()を使用することは明らかですが、私が尋ねたことはまったくありません。私は正確に同じクエリから結果をキャッシュすることについて疑問に思っています。 – BadCash

+0

ループしていると、準備文をループの外に置くのは簡単ですか?バインディングと実行をループしますか? – shanehoban

関連する問題