我目前正在开发一个使用 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**/
}