我应该每次为PHP创建数据库连接吗?

时间:2013-12-11 08:39:44

标签: php mysql performance

在PHP中,我使用以下代码来获取数据库连接:

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

我的问题是,每次连接数据库时都应该创建mysqli对象,如果是这样,会影响数据库性能。有没有办法保存连接($ result)并在以后重用?

感谢。

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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

答案 2 :(得分:0)

创建一个文件connection.php,并在其中声明连接变量。在每个页面的顶部或头文件中包含connection.php。