php - 如何使用 fetch() 获得与 fetchAll() 相同的结果?

标签 php mysql arrays pdo fetch

我正在使用 fetchAll 从 mySQL 数据库中选择数据:

 $sql = "SELECT id, dateTime, fileName, path, size FROM files WHERE project = ?"; 
 $q = $pdo->prepare($sql);
 $q->execute([$id]);
 $result = $q->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);

数组看起来像这样:

array(2) {
  ["10002E41F35560F492298F50D14B03A1"]=>
  array(5) {
    ["dateTime"]=>
    string(19) "2016-10-12 19:46:25"
    ["fileName"]=>
    string(10) "monkey.jpg"
    ["path"]=>
    string(59) "Volumes/KFS18050001/18050001/elephant/cat/monkey/monkey.jpg"
    ["size"]=>
    string(7) "8650752"
  }
  ["10008A76CEE6BEEEB8000891094A2931"]=>
  array(5) {
    ["dateTime"]=>
    string(19) "2016-10-12 14:39:43"
    ["fileName"]=>
    string(9) "horse.jpg"
    ["path"]=>
    string(51) "Volumes/KFS18050001/18050001/elephant/cat/horse.jpg"
    ["size"]=>
    string(7) "8306688"
  }
}

但是当我的数据库中有超过 500.000 个条目时,这对系统来说太多了。未创建数组。加载时间很长,然后我得到一个空白页。我尝试使用 fetch而不是 fetchAll :

 $sql = "SELECT id, dateTime, fileName, path, size FROM files WHERE project = ?"; 
 $q = $pdo->prepare($sql);
 $q->execute([$id]);
 $result = $q->fetch(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);

fetch ,我的系统可以处理 500.000 个条目。但是现在我没有得到我需要的结果:

array(6) {
  ["id"]=>
  string(32) "10002E41F35560F492298F50D14B03A1"
  ["dateTime"]=>
  string(19) "2016-10-12 19:46:25"
  ["fileName"]=>
  string(10) "monkey.jpg"
  ["path"]=>
  string(59) "Volumes/KFS18050001/18050001/elephant/cat/monkey/monkey.jpg"
  ["size"]=>
  string(7) "8650752"
}

horse.jpg只是不显示。并且 id 现在不是数组的键。

有什么方法可以用 fetchAll 检索相同的结果吗?仅使用 fetch或者有没有办法不让 fetchAll 淹没系统?还有很多条目?

最佳答案

由于我非常怀疑您是否需要一次加载 500,000 张图像,因此我建议您尝试以下操作。

我会做的是继续使用 fetchall(),但只从您当前需要的数据库中选择结果。如果您需要加载所有图像,比方说如果您正在创建一个 instagram 类型的程序,我建议您动态加载图像并在您向下滚动页面时,每隔几百张图像查询一次数据库。

你可以在 mysql 中使用 limit 来做到这一点:

SELECT ....query here.... LIMIT 0,100

一旦您的用户向下滚动,比如 80 张图片,请使用以下内容再次查询数据库:

 SELECT ....query here.... LIMIT 100,199

这样您就不会因太多结果而使数据库或客户端系统重载。

关于php - 如何使用 fetch() 获得与 fetchAll() 相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50333769/

相关文章:

cron - 为什么包含 php mail() 的第五个参数时 cron 作业无法发送电子邮件?

php - 使用两个按钮插入数据

php - 仅生成具有约束的有效配置

php - 将数千条记录加载到 MySQL 中的方法

javascript - 将 Json Javascript 格式转换为 PHP 可读格式

php - Laravel 中的原始相关性查询。如何处理?

mysql - 在数据库中保存塞尔维亚拉丁字符

大型数组的 PHP 内存错误

java - 如何在Java中调用具有数组类型的构造函数

php - 从表单发布数组