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

时间:2018-05-14 15:16:14

标签: 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和很多条目来压倒系统?< / p>

1 个答案:

答案 0 :(得分:1)

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

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

您可以使用mysql中的limit执行此操作:

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

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

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

这样,您不会在数据库或客户端系统上重载太多结果。