2013-12-11 130 views
0

在PHP中,我用下面的代碼來獲取數據庫連接:我應該每次爲PHP創建數據庫連接嗎?

$result = new mysqli('localhost', 'root', 'password', 'test'); 
//...some other code 
return $result; 

我的問題是,我應該創建mysqli的對象的時候,如果是這樣,當連接到數據庫,會影響數據庫的性能。有沒有辦法保存連接($結果)並在以後重用?

謝謝。

+4

你每做一次就加載它就可以了。不是每次你運行一個查詢 – Dave

+0

http://php.net/manual/en/mysqli.persistconns.php –

+2

創建一個像「common.php」的頁面,並將它包含到你的每個人php.pages中,所以你只是必須寫一次。以某種方式保存連接是沒有辦法的,至少我無法想象一個。 –

回答

2

您不應該爲每個查詢重新創建數據庫連接。 如果你沒有手動關閉連接,php將不會關閉它,直到頁面請求結束。

爲了讓你可以使用一個單獨的類或全局變量的連接對象。 樣品單例類:

class Db 
{ 
    private static $adapter; 

    public static function getAdapter() 
    { 
     if (is_null(self::$adapter)) { 
      self::$adapter = new mysqli('localhost', 'root', 'password', 'test'); 
     } 
     return self::$adapter; 
    } 
} 
0

創建一個類數據庫連接,並呼籲任何你想去的地方它的對象。這樣做,你也可以在該類中創建其他方法,並假設它是一個單例,我給出了一個演示代碼。

// Defination Of Class DBAccess 
class DBAccess 
{ 

    var $username="root"; 
    var $password="root"; 
    var $hostname="localhost"; 
    var $dbname=""; 

    var $connection = "null"; 
    var $resultset; 
    var $row; 
    var $flag; 
    var $message; 
    var $insertedid; 

    function validate() 
    { 
     echo "John Farnando"; 
    } 

/****************************** START OF CONSTRUCTOR ******************************/ 
    function DBAccess() 
    { 
     if(!$this -> connection = mysql_connect($this -> hostname, $this -> username, $this->password)) 
       $flag = true; 
     else if(!mysql_select_db($this->dbname, $this->connection)) 
       $flag = true; 
    } 
/****************************** END OF CONSTRUCTOR *******************************/ 

/****************************** START OF METHOD getFlag *******************************/ 
    function getFlag() 
    { 
     if($flag) 
     { 
      $flag=false; 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
/****************************** END OF METHOD getFlag *******************************/ 

/****************************** START OF METHOD getConnection *******************************/ 
    function getConnection() 
    { 
     return $this -> connection; 
    } 
/****************************** END OF METHOD getConnection *******************************/ 

/****************************** START OF METHOD insertRecord *******************************/ 
    function insertRecord($query) 
    { 
     $this -> resultset = mysql_query($query, $this->connection); 
     $this -> insertedid = mysql_insert_id(); 

     if($this->resultset) 
     { 
      @mysql_free_result($this->resultset); 
      return true; 
     } 
     else 
     { 
      @mysql_free_result($this->resultset); 
      return false; 
     } 
    } 
/****************************** END OF METHOD insertRecord *******************************/ 

/****************************** START OF METHOD getSingleRecord *******************************/ 
    function getSingleRecord($query) 
    { 
     $r = mysql_query ($query); 
     if(@mysql_num_rows($r) > 0) 
     { 
      return @mysql_fetch_array($r); 
     } 
     else 
     { 
      return false; 
     } 
    } 
/****************************** END OF METHOD getSingleRecord *******************************/ 

/****************************** START OF METHOD getMultipleRecords *******************************/ 
    function getMultipleRecords($query) 
    { 
     $bResult = mysql_query ($query); 
     $data = array(); 
     $index = 0; 
     if(@mysql_num_rows($bResult) >0) 
     {  
      while ($row = @mysql_fetch_array($bResult)) 
      { 
       //echo mysql_error(); 
       $data[$index] = $row; 
       $index++; 
      } 
      //echo "<br />It comes here In While Loop<br />"; 
      return $data; 
     } 
     else 
     { 
      //echo "<br />It comes here In eLSE cASe in Query<br />"; 
      return false; 
     } 
    } 
/****************************** END OF METHOD getSingleRecord *******************************/ 

/****************************** START OF DELETE FUNCTION ***********************************/ 
    function deleteRecord($query) 
    { 
     if(($bResult = mysql_query ($query))==FALSE) 
     { 
      return false; 
     } 
     return true; 
    } 

/****************************** END OF FUNCTION DELETE **************************************/ 

/****************************** START OF FUNCTION UPDATE **************************************/ 
    function updateRecord($query) 
    { 
     if(($bResult = mysql_query ($query))==FALSE) 
     { 
      return false; 
     } 
     return true; 
    } 

/****************************** END OF FUNCTION UPDATE **************************************/ 

/****************************** START OF FUNCTION getNewId *********************************/ 
    function getNewId() 
    { 
     return $this->insertedid; 
    } 
/****************************** END OF FUNCTION getNewId **************************************/ 

} // End of class DBAccess 
0

建立一個文件connection.php,並聲明連接變量。在每個頁面頂部或頭文件中包含connection.php。

+0

你的解決方案是實用的,但它是程序性的。數據庫連接的單例模式是更多的OOP。這是一個更清潔的方法。 –

相關問題