php foreach在一种情况下无法按预期工作

php foreach在一种情况下无法按预期工作,php,foreach,Php,Foreach,我喜欢foreach。我已经成功地使用过很多次了。虽然我不一定了解它如何工作或为什么工作的具体细节,但直到现在,它从未阻止我使用它并获得预期的结果。这是我的场景 我在表单的后端有一点php,允许用户上传某些类型的文件保存到MySQL数据库中。我知道你们中的一些人会说在数据库中保存一个文件是不好的,但是我们暂时把它放在一边,因为在这个问题上有很多意见分歧,而且根本没有真正有效的理由来解释为什么它不好。上传功能运行良好。我希望显示一个表,显示用户已放入数据库的相关文件列表。奇怪的foreach麻烦开

我喜欢foreach。我已经成功地使用过很多次了。虽然我不一定了解它如何工作或为什么工作的具体细节,但直到现在,它从未阻止我使用它并获得预期的结果。这是我的场景

我在表单的后端有一点php,允许用户上传某些类型的文件保存到MySQL数据库中。我知道你们中的一些人会说在数据库中保存一个文件是不好的,但是我们暂时把它放在一边,因为在这个问题上有很多意见分歧,而且根本没有真正有效的理由来解释为什么它不好。上传功能运行良好。我希望显示一个表,显示用户已放入数据库的相关文件列表。奇怪的foreach麻烦开始了。这是我的代码:

try {
    $stmt = $conn->prepare("SELECT * FROM $database.appFiles WHERE appID = :appid AND uaID = :uaid AND applicationKey = :applicationkey");
    $stmt->bindParam(':appid', $appID, PDO::PARAM_INT, 11);
    $stmt->bindParam(':uaid', $uaID, PDO::PARAM_INT, 11);
    $stmt->bindParam(':applicationkey', $applicationKey, PDO::PARAM_STR, 8);
    $stmt->execute();
    $fRes = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); }
if(count($fRes > "0")) {
    //var_dump($fRes);
    foreach ($fRes as $value) {
        echo "  </tr>\n";
        echo "  <tr style=\"background: ".cycleColours()." border-bottom: 1px dotted #c0c0c0;\">\n";
        echo "   <td style=\"padding: 5px;\">".$fRes[0][fileName]."</td>\n";
        echo "   <td style=\"padding: 5px;\">".$fRes[0][fileMime]."</td>\n";
        echo "   <td style=\"padding: 5px;\">".$fRes[0][fileSize]."</td>\n";
        echo "   <td style=\"padding: 5px;\">".uts2date($fRes[0][dateUploaded])."</td>\n";
        echo "   <td style=\"padding: 5px;\">Del</td>\n";
    }

} else {
    echo "  </tr>\n";
    echo "  <tr style=\"border-bottom: 1px dotted #c0c0c0;\">\n";
    echo "   <td class=\"center\" style=\"padding: 5px;\" colspan=\"5\"><i>No files have been uploaded for this application yet</i></td>\n";
}
语法和使用:

    foreach ($fRes as $value => $key) {
但我得到了同样的结果。似乎没有什么区别。从数据库中提取的数据是一个数组(您可以看到我注释掉的var_dump($fRes);我用来检查它)。有趣的是,当我将$fRes[0][fileName]更改为$fRes[1][fileName]时,我得到了第二个文件的名称,等等。这似乎表明出于某种原因,每个文件都在一个平行的单独数组中?为什么?我怎样才能使它像预期的那样正常工作


谢谢

我相信您想将
$fRes[0]
更改为
$value
。如果使用
$fRes[0]
每次循环迭代都会得到第一条记录。

一旦进入foreach循环

 foreach ($fRes as $value)

从$value获取循环数据时,这里和那里几乎没有错误。要清楚地说,
count($fRes>“0”)
不知道如果条件为
,则循环数据应该是这样的
count($fRes)>0
!空($fRes)

//它不算($fRes>“0”)
//$fRes[0]正在获取第一个结果数组,因此将其更改为$value
如果(计数($fRes)>0){
//var_dump($fRes);
foreach($fRes作为$value){
回音“\n”;
回音“\n”;
回显“.$value['fileName']”。\n;
回显“.$value['fileMime']”。\n;
回显“.$value['fileSize']。\n”;
echo“.uts2date($value['dateUploaded'])。“\n”;
回显“Del\n”;
}
}

谢谢您的纠正,并使我免于实现i++计数器来替换我的[0]。:)
 foreach ($fRes as $value)
// its not count($fRes > "0")
// $fRes[0] is getting the first result array so change it to $value
if(count($fRes)  > 0) {
//var_dump($fRes);
foreach ($fRes as $value) {
    echo "  </tr>\n";
    echo "  <tr style=\"background: ".cycleColours()." border-bottom: 1px dotted #c0c0c0;\">\n";
    echo "   <td style=\"padding: 5px;\">".$value['fileName']."</td>\n";
    echo "   <td style=\"padding: 5px;\">".$value['fileMime']."</td>\n";
    echo "   <td style=\"padding: 5px;\">".$value['fileSize']."</td>\n";
    echo "   <td style=\"padding: 5px;\">".uts2date($value['dateUploaded'])."</td>\n";
    echo "   <td style=\"padding: 5px;\">Del</td>\n";
}

}