簡體   English   中英

php類中的pdo連接位置

[英]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個選項:

  1. 我這樣做的方式-僅在與數據庫相關的那些函數中連接到數據庫。 但這意味着每次我運行與數據庫相關的功能。
  2. 在構造函數中打開一個連接,在這種情況下,我只打開了一次,而且即使不需要時也最終打開了它,所以我覺得有時候我將一無所有地創建連接。
  3. 另一方面,我可以使用像這樣的單例數據庫類:

    PDO連接-最大連接數

我在一個頁面上最多有三個相關的對象,有時候我確實需要,有時我不需要在頁面上多次連接到數據庫。 哪種設計更安全?

您可以只使用惰性方式。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM