【发布时间】: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