在PHP中,我用下面的代碼來獲取數據庫連接:我應該每次爲PHP創建數據庫連接嗎?
$result = new mysqli('localhost', 'root', 'password', 'test');
//...some other code
return $result;
我的問題是,我應該創建mysqli的對象的時候,如果是這樣,當連接到數據庫,會影響數據庫的性能。有沒有辦法保存連接($結果)並在以後重用?
謝謝。
在PHP中,我用下面的代碼來獲取數據庫連接:我應該每次爲PHP創建數據庫連接嗎?
$result = new mysqli('localhost', 'root', 'password', 'test');
//...some other code
return $result;
我的問題是,我應該創建mysqli的對象的時候,如果是這樣,當連接到數據庫,會影響數據庫的性能。有沒有辦法保存連接($結果)並在以後重用?
謝謝。
您不應該爲每個查詢重新創建數據庫連接。 如果你沒有手動關閉連接,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;
}
}
創建一個類數據庫連接,並呼籲任何你想去的地方它的對象。這樣做,你也可以在該類中創建其他方法,並假設它是一個單例,我給出了一個演示代碼。
// 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
建立一個文件connection.php,並聲明連接變量。在每個頁面頂部或頭文件中包含connection.php。
你的解決方案是實用的,但它是程序性的。數據庫連接的單例模式是更多的OOP。這是一個更清潔的方法。 –
你每做一次就加載它就可以了。不是每次你運行一個查詢 – Dave
http://php.net/manual/en/mysqli.persistconns.php –
創建一個像「common.php」的頁面,並將它包含到你的每個人php.pages中,所以你只是必須寫一次。以某種方式保存連接是沒有辦法的,至少我無法想象一個。 –