[英]pdo connection position in php class
我現在正在使用PDO,並且有很多類。 每次使用類時,我並不總是使用與數據庫相關的功能。 有時,我會一直使用類,直到最后我可以對數據庫做一些工作,例如將對象保存到數據庫。
所以我目前正在做這樣的事情:
class Something
{
protected $pdo;
function connect()
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
/* lots of functions doing lots of non-DB things */
function saveToDB()
{ $this->connect();
$this->pdo->prepare("Some SQL that saves some stuff");
// now do some DB-related pdo work
}
}
我的問題是-這合理嗎? 這是你們許多人編碼的方式嗎?
如我所見,有3個選項:
另一方面,我可以使用像這樣的單例數據庫類:
我在一個頁面上最多有三個相關的對象,有時候我確實需要,有時我不需要在頁面上多次連接到數據庫。 哪種設計更安全?
您可以只使用惰性方式。
protected $pdo;
function connect()
{
if ($this->pdo === null)
{
$this->pdo = new PDO( "mysql:host=".zConfig::read('hostname').";dbname=".zConfig::read('database'), zConfig::read('username'), zConfig::read('password'));
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
}
檢查這個問題 。
當您的對象定義為ex時,應在類中使用DI實例化連接:
class foo{
public $conn;
function __construct($conn){
$this->conn = $conn;
}
function doSomething(){
}
}
現在,如果您發現自己不想實例化連接,那么當您在不需要數據庫連接的頁面/工作中並且在嘗試連接時顯着降低頁面速度時,請使用PDO屬性
ATT_PERSISTENT
屬性,例如:
$conn = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx',
array( PDO::ATTR_PERSISTENT => true )
);
$object = new foo($conn);
只需簡單地,一旦打開一個頁面,便建立了連接, ATTR_PERSISTENT
方法將存儲該連接,就像會話工作一樣,並且將不斷ATTR_PERSISTENT
頁面,並在每次刷新時幫助您建立與數據庫的新連接一個頁面,或轉到另一個頁面。 嘗試一下..,您會看到頁面加載的速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.