在PHP中,我使用以下代码来获取数据库连接:
$result = new mysqli('localhost', 'root', 'password', 'test');
//...some other code
return $result;
我的问题是,每次连接数据库时都应该创建mysqli对象,如果是这样,会影响数据库性能。有没有办法保存连接($ result)并在以后重用?
感谢。
答案 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。