【发布时间】:2017-09-17 07:34:02
【问题描述】:
我正在尝试获取 MySQL 表的所有行。代码如下:
$sql = "SELECT * FROM my_table";
$connection = new
PDO('mysql:host=localhost;dbname=dbname;charset=utf8','user', 'password');
$statement =$connection->prepare($sql);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
my_table 表有 145 列和 11000 条记录。
当我运行代码时,它无法获取所有记录。但是当我将 $sql 更改为 SELECT ID FROM my_table 或 SELECT * FROM my_table LIMIT 4000 时,它会成功运行。
PDO 获取数据是否有任何限制,或者我是否滥用了它?
解决方案
检查 Apache 错误日志后,我看到了这个错误:apache weAllowed memory size of 134217728 bytes exhausted。 AS @Marcin Orlowski 在 cmets 中说这是一个内存问题。所以我应该选择需要的列并使用where 子句过滤我的记录。
【问题讨论】:
-
是的 - 内存。检查您的错误日志。
-
除了您最有可能在此处获取的内存问题之外,我真的怀疑您是否需要获取所有 11000 行。这通常表明你应该停下来坐下来重新思考你真正在做什么和做什么。
-
我很抱歉。我什至没有考虑检查错误日志。这么愚蠢的问题。我花了一天时间在谷歌上搜索。
-
@Martin Orlowski 你是对的。我不需要所有的数据。我正在测试一段代码,然后我遇到了这个问题。