PHP数据库连接实践

PHP数据库连接实践,php,loops,persistence,database-connection,Php,Loops,Persistence,Database Connection,我有一个连接到多个数据库(Oracle、MySQL和MSSQL)的脚本,每次脚本运行时可能不会使用每个数据库连接,但可以在单个脚本执行中使用所有数据库连接。我的问题是,“在脚本的开头连接到所有数据库一次是否更好,即使所有的连接可能都没有被使用。或者根据需要连接到它们是否更好,唯一的问题是我需要在一个循环中调用连接(这样数据库连接在循环中会有X次是新的) 是的示例代码#1: //脚本开头的连接 $dbh_oracle=connect2db(); $dbh_mysql=connect2db(); $

我有一个连接到多个数据库(Oracle、MySQL和MSSQL)的脚本,每次脚本运行时可能不会使用每个数据库连接,但可以在单个脚本执行中使用所有数据库连接。我的问题是,“在脚本的开头连接到所有数据库一次是否更好,即使所有的连接可能都没有被使用。或者根据需要连接到它们是否更好,唯一的问题是我需要在一个循环中调用连接(这样数据库连接在循环中会有X次是新的)

是的示例代码#1:

//脚本开头的连接
$dbh_oracle=connect2db();
$dbh_mysql=connect2db();
$dbh_mssql=connect2db();

对于($i=1;$i来说,最佳性能/实践规则很简单:只连接一个数据库


至于连接-尝试实现一些数据库访问类。这些类可以根据需要自动连接。

使用延迟连接包装类:

class Connection
{
    private $pdo;
    private $dsn;

    public __construct($dsn)
    {
        $this->dsn = $dsn;
    }

    public query($sql)
    {
        //the connection will get established here if it hasn't been already
        if (is_null($this->pdo))
            $this->pdo = new PDO($this->dsn);

        //use pdo to do a query here

    }
}
我希望您已经在使用PDO。如果没有,您应该这样做。PDO是独立于数据库的。如果您使用过程函数进行此操作,则必须为每个数据库类型创建一个新类

无论如何,这只是一个框架(例如,您可能希望在
query()
中添加
$params
选项),但您应该能够理解这一点。只有在调用
query()
时才尝试连接。构造对象不会建立连接


作为一个旁观者,考虑使用它。它有惰性连接,使生活更容易。

+ 1。如果你不知道,如果需要一个特定的连接,使用懒惰的连接,只有当它们被使用时才变得活跃。懒惰的连接。我从来没有听说过这一点,你能提供一个好的资源吗?Google。我创建了一个类似的类来使用XML配置,还有一个使用类型(mysql、mssql、oracle)的通用连接和查询类定义连接/查询功能。@Phill如果您使用PDO,您甚至不需要这样做,那么无论您连接到哪个数据库,它都可以工作,而无需更改代码。您必须签出PDO,thnxagain@ryeguy例如,我将如何在模型类中使用它?使用setter(通过DI)实现吗?myclass(){public function setConn….}
// Connections in the loop
for ($i=1; $i<=5; $i++) {
   // NOTE: Would use all the connections but connecting multiple times
   $dbh_oracle = connect2db();
   $dbh_mysql  = connect2db();
   $dbh_mssql  = connect2db();

   $rs_oracle = queryDb($query,$dbh_oracle);
   $rs_mysql  = queryDb($query,$dbh_mysql);
   $rs_mssql  = queryDb($query,$dbh_mssql);
}
class Connection
{
    private $pdo;
    private $dsn;

    public __construct($dsn)
    {
        $this->dsn = $dsn;
    }

    public query($sql)
    {
        //the connection will get established here if it hasn't been already
        if (is_null($this->pdo))
            $this->pdo = new PDO($this->dsn);

        //use pdo to do a query here

    }
}