首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP数据库连接实践

PHP数据库连接实践
EN

Stack Overflow用户
提问于 2010-04-01 21:26:39
回答 2查看 3.7K关注 0票数 4

我有一个脚本,连接到多个数据库(甲骨文,MySQL和微软的all ),每个数据库连接可能不是每次脚本运行时使用,但所有都可以在一个单一的脚本执行。我的问题是,“是在脚本开始时连接到所有数据库一次更好,还是在需要时连接到它们更好,唯一的问题是我需要在循环中调用连接(所以数据库连接在循环中X次都是新的)。”

是的示例代码#1:

代码语言:javascript
运行
复制
// Connections at the beginning of the script
$dbh_oracle = connect2db();
$dbh_mysql  = connect2db();
$dbh_mssql  = connect2db();

for ($i=1; $i<=5; $i++) {
   // NOTE: might not use all the connections
   $rs = queryDb($query,$dbh_*); // $dbh can be any of the 3 connections
}

是的示例代码#2:

代码语言:javascript
运行
复制
// 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);
}

现在,我知道您可以使用持久连接,但是对于循环中的每个数据库,这是否也是一个打开的连接?比如mysql_pconnect()mssql_pconnect()adodb for Oracle persistent connection method。我知道持久连接也会占用大量资源,因为我正在寻找最佳性能/实践。

why persistent connections could cause problems上有一篇很好的文章

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-01 21:58:05

使用惰性连接包装类:

代码语言:javascript
运行
复制
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()时才会尝试连接。构造对象不会建立连接。

顺便说一句,考虑使用Doctrine。它有懒惰的连接,通常使生活变得更容易。

票数 15
EN

Stack Overflow用户

发布于 2010-04-01 21:30:22

最佳性能/实践规则很简单:只连接到一个数据库。

至于连接--试着实现一些数据库访问类。它可以按需自动连接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2560647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档