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

如何组合多个php/mysql数据库连接?,php,oop,Php,Oop,在构建动态网站时,我使用php include与数据库建立连接。包含的文件非常基本: mysql\u connect($hostname='host',$username='user',$password='password'); mysql_select_db(“数据库”) 这个很好用 在某些地方,我使用AJAX系统创建数据库记录的拖放重新排序,同时更新数据库,它是根据我在互联网上找到的内容改编的。它使用自己的连接代码: 类可排序示例{ 受保护的$conn; 受保护的$user='user'

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

mysql\u connect($hostname='host',$username='user',$password='password');
mysql_select_db(“数据库”)

这个很好用

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


类可排序示例{
受保护的$conn;
受保护的$user='user';
受保护的$pass='密码';
受保护的$dbname='数据库';
受保护的$host='host';
公共函数构造(){
$this->conn=mysql\u connect($this->host,$this->user,$this->pass);
mysql_选择_数据库($this->dbname,$this->conn);
}

这个也很好吃

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


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

您只需将数据库连接代码放入另一个文件中,并将其包含在需要的任何地方。

最后一个问题是e阿西

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);
  }
}

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

使用具有惰性实例化的单例:

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();
在任何需要的地方使用连接

因此,可排序的示例将变成:

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

我喜欢这样的外观,但我想我必须在我的网站中修改许多调用我正常数据库连接的页面。不过,当我有更多时间时,我会仔细研究它,因为我认为我应该使用更多类似这样的代码,少用我创建的基本内容。这是我通常做的,但是有创建功能的文件在其中的一个类中,我无法让我已经创建的连接发挥作用。不过,多亏了Kolky的回答,它现在起作用了。这就是诀窍。我自己的尝试几乎达到了目的,但我忘了在变量前面使用全局。