这个PHP类是否针对mysql数据库访问进行了优化?

rog*_*pvl 2 php mysql database performance class

我写了一个快速的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;

}
Run Code Online (Sandbox Code Playgroud)

}

Pao*_*ino 13

(我知道在脚本完成后,连接应该由PHP本身关闭,但我不喜欢非常依赖它).

为什么?这是该语言的一个特征.没有理由不信任它.很多网站运行得很好,依靠PHP来关闭他们的东西.当然,作为程序员,我们希望自己关闭它.没关系.但是为每个查询打开和关闭数据库连接是一个可怕的想法.更好的方法是open()从构造函数调用,并重命名close()__destruct().根据该文件,__destruct将被称为"尽快给特定对象的所有引用都被删除或者当对象被显式销毁或者在关机序列中的任何命令." 听起来像是一个理想的地方来隐藏数据库连接的结束代码.

  • 进一步说明,打开数据库连接是一项非常昂贵的操作.对于一些DBMS,对于简单查询,打开连接可能比查询需要更多资源.此外,您完全破坏了在连接期间存在的任何事物,例如事务,临时表,每个连接变量等.在每个查询之间重新连接真的非常难看,并且没有充分的理由去做. (5认同)