存储数据库(PDO)连接

时间:2012-05-17 17:35:18

标签: php pdo

我正在编写一个PHP应用程序,我注意到我的页面加载有点慢。我需要大约2秒钟(确切地说是2.0515811443329)。

我已经找到了瓶颈问题,这是我正在创建与MySQL数据库的PDO连接的部分。

我的'connect()'方法没有做任何exoctic的东西。它看起来像这样:

public function connect ( $database, $host, $username, $password )
{
    try
    {
        $this->db = new \PDO("mysql:dbname=".$database.";host=".$host, $username, $password);
        if ( !$this->db )
        {
            throw new \Exception('Failed to connect to the database!');
        }

        $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    }
    catch ( \Exception $e )
    {
        echo '<strong>Exception: </strong>'.$e->getMessage();
        return false;
    }

    return true;
}

所以当我注释掉对'connect()'方法的调用时,我的页面加载:0.035506010055542

这是一个巨大的差异。我可以想象,创建与数据库的连接确实需要一些时间,但需要超过1.5秒......我不确定这是否正常?

如果这是正常的,它需要花费那么多时间,那么有没有办法存储数据库连接?喜欢把它放在一个会话中?实际上,据我所知,将其存储在会话中是不可能的。但这将是理想的解决方案。在某个地方存储连接,直到用户关闭浏览器。

无论如何,我的PDO / MySQL有问题吗?我可以简单地以某种方式存储连接资源吗?因此,我不必每次都为每个新页面重新连接到我的数据库?

PS。我在localhost(Windows)上做这一切。

2 个答案:

答案 0 :(得分:3)

您可能正在与'localhost'建立连接作为地址。尝试将其更改为“127.0.0.1”。这应该可以解决问题。

答案 1 :(得分:1)

您可以使用PDO创建与数据库的持久连接。来自manual

  

许多Web应用程序将从与数据库服务器的持久连接中受益。持久连接不会在脚本末尾关闭,而是在另一个脚本使用相同凭据请求连接时进行高速缓存和重新使用。持久连接缓存允许您避免每次脚本需要与数据库通信时建立新连接的开销,从而使Web应用程序更快。

例如:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>