【问题标题】:PDO slow on PHP 5.4 and Apache 2.4.3 [duplicate]PDO 在 PHP 5.4 和 Apache 2.4.3 上运行缓慢 [重复]
【发布时间】:2012-10-19 09:44:53
【问题描述】:

可能重复:
mysql_connect (localhost / 127.0.0.1) on Windows platform

我刚刚在开发机器上更新了我的 Apache 和 PHP 版本,而 PDO 完全崩溃了。

这是死的简单 PDO 类:

class PDO_DBH {
    public static function openSesame() {
        echo '<p>start openSesame: </p>'.microtime(true);
        $db_username = 'root';
        $db_password = 'pass';
        try {
            $dbh = new PDO('mysql:host=localhost;dbname=DB_NAME', $db_username, $db_password);
            $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
            echo '<p>end successful openSesame: </p>'.microtime(true);
            return $dbh;
        } catch (PDOException $e) {
            echo '<p>end failed openSesame: </p>'.microtime(true);
            return 'PDO database access error!';
        }
    }
}

在升级之前,目前在其他开发机器上,一个典型的页面将在一秒钟内加载,最多两个。

现在,通过microtime(true) 的奇迹,我看到每个连接打开大约需要一整秒。

一个典型的页面可能会创建一个新的$dbh 然后$dbh = null; 20 次,因为不同的对象和方法会检索他们需要的数据。这在其他机器或我的虚拟主机上从来都不是问题。

我哪里出错了?

【问题讨论】:

  • 如果你连接到127.0.0.1而不是localhost怎么办?我敢打赌它应该会有所帮助;-)
  • 你可以禁用MySQL的reverse DNS checks
  • @AndrewHeath 而不是返回错误字符串,我会推荐throw $e;。永远不要丢弃这样的异常。另外,这是什么操作系统?
  • @Phil - 关于$e,我在剪切和粘贴时简化了代码,因为我认为该位无关紧要,我在真实脚本中确实有一个处理程序。谢谢你的关心。 :-)
  • @AndrewHeath 这就是为什么它很重要 - stackoverflow.com/questions/11663860/…。这是另一个解决方案 - php.net/manual/en/function.mysql-connect.php#94316

标签: php apache pdo


【解决方案1】:

这只是一个猜测 - 但在 Windows 机器上更改为 127.0.0.1 而不是 localhost 可以解决问题。

【讨论】:

  • 问题正在尝试解决localhost。窗户很笨
  • @Phil: 但 localhost 在 hosts 中,应该始终缓存。所以不应该马上解决吗?
  • 是的,但在 Windows 上它存在两次。一次用于127.0.0.1,一次用于::1。问题是它首先尝试 IPv6 并尝试通过该地址进行连接(MySQL 未在其上侦听)
  • 尝试了 hosts 文件,但没有成功。但是,在 PHP 代码中将 127.0.0.1 而不是 localhost 作为函数 mysql_connect() 的参数就可以了。无法想象 DNS 解析多年来在 Microsoft 平台上仍然存在性能问题。它也会影响其在 dot net 框架上的项目。
猜你喜欢
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2012-01-26
  • 2021-08-27
相关资源
最近更新 更多