【问题标题】:Store database (PDO) connection存储数据库 (PDO) 连接
【发布时间】:2012-05-17 17:35:17
【问题描述】:

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

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

我的 'connect()' 方法没有做任何奇异的事情。它看起来像这样:

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) 上做这一切。

【问题讨论】:

  • 你连接的是什么主机?如果它是 TCP 上的远程主机,您可能会遇到缓慢的 DNS 查找或类似情况
  • @Michael 我想我在你写这篇文章的时候编辑了我的帖子。我在帖子末尾添加了它。本地主机和 Windows。
  • 如果只使用命令行mysql -u username -p password连接本地主机是否也需要很长时间?
  • @Michael Nope,这真的很快。

标签: php pdo


【解决方案1】:

您可能正在使用“localhost”作为地址进行连接。尝试将其更改为“127.0.0.1”。这应该可以解决问题。

【讨论】:

  • 太棒了!从来没有想过这样的事情可能是问题所在。但实际上,它解决了我的问题。我的页面现在通过数据库连接在不到一秒的时间内加载!
  • 问题是为什么它会有所作为?
【解决方案2】:

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

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

还有例子:

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

【讨论】:

  • 谢谢,Vivendi 的回答实际上解决了这个问题。但是,当应用程序准备好上线时,这仍然会派上用场。
猜你喜欢
  • 2013-05-14
  • 1970-01-01
  • 2021-12-06
  • 2011-02-25
  • 1970-01-01
  • 2014-10-31
  • 2017-03-30
  • 2015-01-14
  • 2016-03-27
相关资源
最近更新 更多