2012-04-17 60 views
0

當使用PDO和MySQL時,緩存結果是否有任何好處,我知道我將在同一頁面上使用多次?或者PDO/MySQL自動處理這種事情?PDO和緩存,如何在數據庫類中實現它?

如果我自己做,我應該存儲查詢的實際結果,還是我可以將PDOStatements存儲在緩存中並重用它們?

當然,我可以存儲任何結果,我知道我將在一個變量的頁面上多次使用,但讓我的數據庫類透明地處理這類事情似乎更清晰。例如,我希望能夠調用$ DB-> get_username_by_id($ id),而不必擔心它是直接來自數據庫還是來自緩存。

或者我可能會放棄製作我自己的數據庫類的想法,如果你們中的任何一個人可以指向一個超級輕量級​​,易用,有效,多功能的,可以在PDO上使用MySQL共享主機...

+0

你能持有'$ DB-> get_username_by_id的結果()'在一個變量在整個頁面中使用?如果不是,請考慮用戶類和單例模式。 – 2012-04-17 15:59:28

+0

如何使用此解決方案實現緩存?即使我創建了一個USER類,我仍然需要在USER或DB類中管理緩存,對吧?我猜你的意思是說USER類應該處理緩存?這會起作用,但將所有這些功能都放到數據庫類中看起來更清潔和更合理。 – BadCash 2012-04-17 17:15:43

回答

0

嗯,ID總是建議使用現有的圖書館,而不是自定義的東西,除非你有一個非常好的藉口不要。在這種情況下,編號爲Doctrine DBAL,因爲您似乎沒有使用對象來保存您的數據。如果您想要完整的OOP路線並將數據映射到特定對象,請使用完整的Doctrine ORM

+0

我翻閱了關於DBAL的文檔,但是我仍然不清楚使用它而不是直接使用PDO的好處是什麼?我在文檔中找不到關於緩存的任何信息?它是否實現某種形式的結果緩存,而不是PDO單獨執行的操作? – BadCash 2012-04-17 16:11:12

+0

我實際上並不知道結果緩存(根據你所尋找的內容)將其構建到PDO。如果有的話,我會假設Doctrine會圍繞這個接口來包裝一個接口。我知道ORM有能力使用緩存,我可能錯誤地認爲這是在DBAL層而不是在ORM層中完成的。 – prodigitalson 2012-04-17 17:33:46

2

這可以幫助你PHP PDO Caching

如果使用PDO則PDO ::準備是你的朋友:

調用PDO ::準備()和PDOStatement對象::執行()爲將要發表的聲明通過允許驅動程序協商查詢計劃和元信息的客戶端和/或服務器端緩存,並通過不需要手動引用參數來幫助防止SQL注入攻擊,多次使用不同的參數值優化了應用程序的性能。

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

+0

使用prepare()發出具有不同參數值的相同語句是顯而易見的,但根本不是我所問的。我想知道從完全相同的查詢緩存結果。 – BadCash 2012-04-17 16:16:26

+0

因此,如果循環,我簡單地把我的準備聲明放在循環之外?並循環綁定並執行? – shanehoban 2014-07-07 08:06:30