PHP5.4和Apache2.4.3上的PDO速度较慢
可能重复:PHP5.4和Apache2.4.3上的PDO速度较慢,php,apache,pdo,Php,Apache,Pdo,可能重复: 我刚刚在一台开发机器上更新了我的Apache和PHP版本,PDO完全崩溃了 这是一个非常简单的PDO类: class PDO_DBH { public static function openSesame() { echo '<p>start openSesame: </p>'.microtime(true); $db_username = 'root'; $db_password = 'pass';
我刚刚在一台开发机器上更新了我的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!';
}
}
}
类PDO_DBH{
公共静态函数openSesame(){
echo“启动openSesame:”。微时间(true);
$db_username='root';
$db_password='pass';
试一试{
$dbh=newpdo('mysql:host=localhost;dbname=DB_NAME',$DB_username,$DB_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
echo“结束成功的openSesame:”。微时间(true);
返回$dbh;
}捕获(PDO$e){
echo“结束失败:返回“”。微时间(true);
返回“PDO数据库访问错误!”;
}
}
}
在升级之前,以及目前在其他开发人员机器上,一个典型的页面将在一秒钟内加载,最多两秒钟
现在,通过microtime(true)
的奇迹,我看到每个连接打开都需要大约一秒钟的时间
典型的页面可能会创建一个新的$dbh
,然后$dbh=null当不同的对象和方法检索所需的数据时,代码>会重复20次。这在其他机器或我的Web主机上从来都不是问题
我哪里出错了?这只是一个猜测——但在windows计算机上,将127.0.0.1
改为localhost
会起作用。如果您连接到127.0.0.1
而不是localhost
,该怎么办?我打赌这会有帮助;-)您可以选择哪个选项来禁用MySQL。@AndrewHeath而不是返回错误字符串,我建议抛出$e代码>。永远不要放弃这样的异常。还有,这是什么操作系统?@Phil-关于$e
,我在剪切和粘贴时简化了代码,因为我认为这一点不相关,我在实际脚本中确实有一个处理程序。感谢您的关心。:-)@安德烈:这就是为什么它很重要。这里有另一个解决方案-问题是试图解决localhost
。Windows是dumb@Phil:但localhost位于应始终缓存的主机中。那么它不应该立即解决吗?是的,但在Windows上它在那里两次。一次用于127.0.0.1
,一次用于::1
。问题是,它先尝试IPv6,然后尝试通过该地址(MySQL不在该地址上侦听)连接尝试过的主机文件,但没有成功。但是,在PHP代码中,将127.0.0.1而不是localhost作为函数mysql_connect()的参数就可以实现这一点。无法想象DNS解析多年来在Microsoft平台上仍然存在性能问题。它也影响到它在dotnet框架上的项目。