加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP 5.3.5 PDO FETCH_OBJ内存泄漏?

发布时间:2020-12-13 17:22:57 所属栏目:PHP教程 来源:网络整理
导读:我目前正在开发一个使用PDO的 PHP应用程序.我正在写一个导入文件,它读入一个CSV文件,检查数据库中的记录,以及更新,删除等等…. 我注意到的是这个脚本使用的内存似乎非常高,似乎可能与我执行查询的方式有关.请参阅下面的示例查询,该查询是针对CSV中的每一行执
我目前正在开发一个使用PDO的 PHP应用程序.我正在写一个导入文件,它读入一个CSV文件,检查数据库中的记录,以及更新,删除等等….

我注意到的是这个脚本使用的内存似乎非常高,似乎可能与我执行查询的方式有关.请参阅下面的示例查询,该查询是针对CSV中的每一行执行的:

$qry = "SELECT * FROM company WHERE id = 1";
$sth = $this->prepare($qry);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_INTO,new Company());
$sth->fetch();

对于上面的memory_get_peak_usage()= 6291456

使用以下时:

$qry = "SELECT * FROM company WHERE id = 1";
$sth = $this->prepare($qry);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_CLASS,"Company");
$sth->fetch();

对于上面的memory_get_peak_usage()= 524288

你可以看到差异相当大.

我想我有3个问题..

>在PHP 5.3.5中使用PDO :: FETCH_OBJ时是否存在内存泄漏?
>使用FETCH_CLASS与FETCH_OBJ相比有什么区别吗?
>还有其他人遇到过同样的问题吗?

公司类很简单:

class Company {
    function __construct(){}
    /**classvars**/
    public $_tablename = 'company';
    public $transient;
    public $id;
    public $name;
    /**endclassvars**/
}

解决方法

看看 PHP changelog,似乎在5.3.4中有一个相关的修正,其中一个是 memory leak was fixed in PDO FETCH_INTO.

从你所说的,我怀疑是的,这是你看到的错误.当然,解决方案是升级 – 坚持使用旧的补丁版本毫无意义.

即使这不是您所看到的错误,在5.3.3和现在之间的版本中已经有大量的PDO修复;我敢肯定,至少其中一些与你相关的机会很大.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读