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

ryhaxcpt  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(334)

我正在使用 fetchAll :

$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"
  }
}

但是当我的数据库中有超过500000个条目时,这对系统来说就太多了。未创建数组。它是加载很长,然后我得到一个空白页。我试着用 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 ,我的系统可以处理500000个条目。但现在我没有得到我想要的结果:

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` 使用just `fetch` 或者有没有一种方法可以让系统不被 `fetchAll` 还有很多条目?
elcex8rz

elcex8rz1#

因为我非常怀疑你是否需要一次加载500000张图片,我建议你尝试下面的方法。
我要做的是继续使用fetchall(),但只从当前需要的数据库中选择结果。如果你需要加载所有的图片,假设你正在创建一个instagram类型的程序,我建议你动态加载图片,当你向下滚动页面时,每隔几百张图片查询一次数据库。
你可以这样做 limit 在mysql中:

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

一旦您的用户向下滚动了80张图片,请使用以下命令再次查询数据库:

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

这样,您就不会用太多的结果来重载数据库或客户机系统。

相关问题