【问题标题】:PHP Why array is saving extra row [duplicate]PHP为什么数组节省了额外的行[重复]
【发布时间】:2018-03-06 13:22:59
【问题描述】:

在 sqlqry.php 中

function procat(){
    require_once("..\db.php");

    $procat = $DBH->prepare("SELECT pro_sr FROM products LEFT JOIN 
    categories ON products.pro_cat=categories.cat_sr");
    $procat->execute();
    while($rowprocat[]=$procat->fetch()) {}
    return $rowprocat;
}

在 products.php 中

<?php 
    $rowprocat=procat(); 
    print_r($rowprocat); 
?>

Array ( [0] => Array ( [pro_sr] => 60 [0] => 60 ) [1] => Array ( [pro_sr] => 61 [0] => 61 ) [2] => Array ( [pro_sr] => 62 [0] => 62 ) [3] => )

为什么它显示 4 行,而实际上它有 3 条记录。在 phpMyAdmin 中也测试显示 3。第 4 行是空的。

【问题讨论】:

  • 因为你感觉自己很聪明,并试图节省自己编写一行代码
  • 对于我之前在您的上述评论中所写的内容感到抱歉。我的问题与您的假设不同。当你标记为重复并关闭时,我疯了。巨大的责任伴随着巨大的力量。再次抱歉。

标签: php mysql arrays database pdo


【解决方案1】:

因为你是把$procat-&gt;fetch()的返回值赋给一个数组,不管有没有结果。

这就是为什么大多数人在 PHP 中使用临时变量的原因:

function procat(){
    require_once("..\db.php");

    $procat = $DBH->prepare("SELECT pro_sr FROM products LEFT JOIN 
    categories ON products.pro_cat=categories.cat_sr");
    $procat->execute();
    while($row = $procat->fetch()) {
        $rowprocat[] = $row;
    }
    return $rowprocat;
}

【讨论】:

  • 谢谢@feeela。 fetchAll 帮助了我。我也试过你的方法,效果也很好。非常感谢像你这样努力帮助他人的人。
  • @EmraanAly 请注意,如果您处理大量数据,fetchAll 将一次将其全部加载到内存中,而 fetch 每次调用仅加载一行结果。因此,正确使用fetch 通常会产生更快、更轻量级的脚本。
  • 目前我只有 3 行,但后来我猜最多 1000 行(20 多列)。是的,加载时间很重要。有没有办法测试两者的时间消耗?对不起,如果成为害虫。 :) 感谢您对我的教育。
  • 说实话,你的代码和 fetchAll 一样。甚至每次调用加载一个结果
  • 而且,鉴于您正在为人类选择数据,他的认知能力将成为瓶颈,而不是服务器的内存。对于一个脚本来说,2k 行不算什么,但人类将无法阅读它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多