我编写了一个快速的 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;
}
最佳答案
(I know that the connection is supposed to close by PHP itself after the script finishes, but I don't like to rely very much on that).
为什么?这是语言的一个特点。没有理由不信任它。许多网站运行良好,依靠 PHP 来关闭它们的内容。作为程序员,我们当然想自己关闭它。没关系。但是为每个查询打开和关闭数据库连接是一个可怕的想法。更好的方法是从构造函数中调用 open()
,并将 close()
重命名为 __destruct()
.根据文档,__destruct
将被调用,“一旦对特定对象的所有引用都被删除,或者当对象被显式销毁或以任何顺序关闭时”。听起来像是隐藏数据库连接关闭代码的理想场所。
关于php - 这个 PHP 类是否针对 mysql 数据库访问进行了优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870621/