如何组合多个php / mysql数据库连接?

时间:2010-01-19 10:59:11

标签: php oop

在构建动态网站时,我使用php include来建立与数据库的连接。包含的文件非常基本:

mysql_connect($hostname = 'host', $username = 'user', $password = 'password'); mysql_select_db('database');

这很好用。

在某些地方,我使用AJAX系统创建数据库记录的拖放重新排序,同时更新数据库,它改编自我在互联网上找到的东西。这使用自己的连接代码:

class SortableExample { protected $conn;
protected $user = 'user';
protected $pass = 'password';
protected $dbname = 'database';
protected $host = 'host';
public function __construct() {
$this->conn = mysql_connect($this->host, $this->user, $this->pass);
mysql_select_db($this->dbname,$this->conn);
}

这也很好。

然而,这意味着我必须将用户名,密码,主机和数据库添加到两个单独的文件中。有时第二个被遗忘并导致网站失败。

我的问题是,如何将两个连接文件合并为一个,或者如何让第二个代码块接受外部变量,这样我只需要在一个地方输入实际值?

3 个答案:

答案 0 :(得分:1)

你的最后一个问题很简单。

db.config.php

$host = '';
$user = '';
$pass = '';
$db = '';

db.plain.php

include 'db.config.php';

$conn = mysql_connect($host, $user, $pass);
mysql_select_db($db,$conn);

db.class.php

include 'db.config.php';

class SortableExample
{
  protected $conn;
  public function __construct()
  {
    global $host, $user, $pass, $db;
    $this->conn = mysql_connect($host, $user, $pass);
    mysql_select_db($db,$this->conn);
  }
}

答案 1 :(得分:0)

您可以简单地将数据库连接代码放在另一个文件中,并将其包含在您需要的任何位置。

答案 2 :(得分:0)

为数据库连接创建一个入口点。

使用具有延迟实例化的Singleton:

class ConnectionProvider { 
    protected $conn;
    protected $user = 'user';
    protected $pass = 'password';
    protected $dbname = 'database';
    protected $host = 'host';
    private static $__instance;

    private function __construct() {
        $this->conn = mysql_connect($this->host, $this->user, $this->pass);
        mysql_select_db($this->dbname,$this->conn);
    }

    public static function getInstance() {
        if ( self::$__instance == null) {
            self::$__instance = new ConnectionProvider();
        }
        return self::$__instance;
    }

    public function getConnection() {
        return $this->conn;
    }
}

然后,从你的代码

ConnectionProvider::getInstance()->getConnection();

在任何需要的地方使用连接。

SortableExample因此将成为:

class SortableExample { 
    protected $conn;
    public function __construct() {
        $this->conn = ConnectionProvider::getInstance()->getConnection();
    }
    ...
}