【问题标题】:PDO fails on selecting large number of recordsPDO 在选择大量记录时失败
【发布时间】: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_tableSELECT * FROM my_table LIMIT 4000 时,它会成功运行。

PDO 获取数据是否有任何限制,或者我是否滥用了它?

解决方案

检查 Apache 错误日志后,我看到了这个错误:apache weAllowed memory size of 134217728 bytes exhausted。 AS @Marcin Orlowski 在 cmets 中说这是一个内存问题。所以我应该选择需要的列并使用where 子句过滤我的记录。

【问题讨论】:

  • 是的 - 内存。检查您的错误日志。
  • 除了您最有可能在此处获取的内存问题之外,我真的怀疑您是否需要获取所有 11000 行。这通常表明你应该停下来坐下来重新思考你真正在做什么和做什么。
  • 我很抱歉。我什至没有考虑检查错误日志。这么愚蠢的问题。我花了一天时间在谷歌上搜索。
  • @Martin Orlowski 你是对的。我不需要所有的数据。我正在测试一段代码,然后我遇到了这个问题。

标签: php mysql pdo


【解决方案1】:

您应该添加 foreach 选项以正确获取它.. 只需回显下面的行列即可显示那里的列。

<?php
$connection = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8','user', 'password');
$sql = "SELECT * FROM `my_table`";
$statement =$connection->prepare($sql);
$statement->execute();
$result1 = $statement->fetchAll(PDO::FETCH_ASSOC);
//Re written by Ajmal PraveeN
foreach($result1 as $result){
echo $result['column'];
echo $result['column2'];
}
?>

【讨论】:

  • 此行失败。 $result1 = $statement-&gt;fetchAll(PDO::FETCH_ASSOC); 。所以不可能循环遍历行。
猜你喜欢
  • 2020-04-28
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2021-03-05
  • 2020-09-28
  • 2023-03-30
相关资源
最近更新 更多