我正在尝试新兴它们(php mysql连接)以避免冗余。但是这里的主要问题是每当使用“mysql_real_esacpe_string”时,它需要顶部的mysql_connect,这可能导致无法在函数中出现它们?
示例:
function runquery($query){
connect(); //Connecting database
issue_query($query); //Calling mysql_query function
disconnect($link); //Calling mysql_close function
}
答案 0 :(得分:3)
您不应为每个查询打开和关闭连接。除非在完成与数据库的通信后进行一些长时间的处理,否则根本不需要关闭连接;当执行结束并释放资源时它将被关闭。每次重新连接都会在建立TCP连接和执行握手和身份验证之前产生大量开销,然后才能发出查询。
答案 1 :(得分:1)
您还可以创建处理与singleton的mysql连接的类。
class mysqlController {
private $connection;
private $db;
private static $instance;
private function __construct() {
}
public static function getInstance() {
if(!self::$instance) { // First time this method is called
self::$instance = new mysqlController();
}
return self::$instance;
}
public function openConnection($db_host, $db_user, $db_password, $db_name)
{
if(!$this->connection)
{
$this->connection = mysql_connect($db_host, $db_user, $db_password);
if(!$this->connection)
{
die('Database error: ' . mysql_error());
}
else
{
$this->db = mysql_select_db($db_name, $this->connection);
if(!$this->db)
{
die("Database error: " . mysql_error());
}
}
}
}
}
使用mysql-connection获取带有getInstance() - 函数的实例。
$connection = mysqlController::getInstance();
$connection->openConnection('host', 'user', 'pass', 'database');
$connection->query(.....); // For example
当然你还需要在这里创建查询功能等。