我写了一个快速的PHP类来简化对mysql数据库的访问。该类工作正常,并有一个query()方法打开连接,执行查询,然后关闭连接(我知道连接应该在脚本完成后由PHP本身关闭,但我不喜欢非常依赖那个)。
从性能的角度来看,我知道每次执行查询时始终打开与数据库的连接可能不是一个很好的做法(当我尝试使用mysql_real_escape_string()来过滤输入时,它也没有'工作,因为没有活动的数据库连接)。但我想对此更加澄清。做错了吗?为什么?而且我也想知道这个的好方法。
这是班级:
class DB {
private $conn;
//database data
private $dbhost;
private $dbname;
private $dbuser;
private $dbpass;
/**
* Constructor
* @dbhost string the database host
* @dbname string the database name
* @dbuser string the database username
* @dbpass string the database password
*/
public function __construct ($dbhost, $dbname, $dbuser, $dbpass)
{
$this->dbhost = $dbhost;
$this->dbname = $dbname;
$this->dbuser = $dbuser;
$this->dbpass = $dbpass;
}
/**
* Connects to mysql database
*/
private function open ()
{
$this->conn = mysql_connect ($this->dbhost, $this->dbuser, $this->dbpass)
or die ("Error connecting to database");
mysql_select_db ($this->dbname) or die ("Error selecting database");
}
/**
* Closes the connection to a database
*/
private function close ()
{
mysql_close($this->conn);
}
/**
* Executes a given query string
* @param string $query the query to execute
* @return mixed the result object on success, False otherwise
*/
public function query ($query)
{
$this->open();
$result = mysql_query($query, $this->conn)
or die ("Error executing query ".$query." ".mysql_error());
$this->close();
return $result;
}
}
答案 0 :(得分:13)
(我知道在脚本完成后,连接应该由PHP自己关闭,但我不想非常依赖它。)
为什么呢?这是该语言的一个特征。没有理由不信任它。很多网站运行得很好,依靠PHP来关闭他们的东西。当然,作为程序员,我们希望自己关闭它。没关系。但是为每个查询打开和关闭数据库连接是一个可怕的想法。更好的方法是从构造函数中调用open()
,并将close()
重命名为__destruct()
。根据文档,只要删除了对特定对象的所有引用,或者在关闭序列中明确销毁对象或按任何顺序,就会调用__destruct
。听起来像是一个隐藏数据库连接结束代码的理想场所。