Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP5.4和Apache2.4.3上的PDO速度较慢_Php_Apache_Pdo - Fatal编程技术网

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框架上的项目。