【问题标题】:PHP Why does my foreach loop only give 1 result? [duplicate]PHP 为什么我的 foreach 循环只给出 1 个结果? [复制]
【发布时间】:2018-08-21 10:54:03
【问题描述】:

为什么我的 foreach 只显示 1 个结果,为什么不显示两个结果,因为它清楚地显示在我的数据库中有 2 个 Com_Id 为 1 的结果,但它仍然只给我 1 个结果。这就是我的数据库的样子

这是我得到的结果

$id = $_GET['view'];

我的代码:

<?php
    $sql = "SELECT * FROM IA_Monitor WHERE Com_ID = :id";
    $query = $conn->prepare($sql);
    $query->execute(array(':id' => $id));
    while($row = $query->fetch(PDO::FETCH_ASSOC)){
        $mon_comid = $row['Com_ID'];
        $mon_barcode[0] = $row['Barcode'];
        $mon_merk = $row['Merk'];
        $mon_type = $row['Type'];
        $mon_inch = $row['Inch'];
        $mon_a_dat = $row['Aanschaf_dat'];
        $mon_a_prijs = $row['Aanschaf_waarde']; 
    }
$monnewDate = date("d-m-Y", strtotime($mon_a_dat));
if($id==$mon_comid){
foreach($mon_barcode as $key => $value){
    ?>
    <title><?php echo $value; ?></title>
    <table>
        <tr><td>Monitorbarcode: </td><td><?php echo $value;?></td></tr>
        <tr><td>Merk: </td><td><?php echo $mon_merk;?></td></tr>
        <tr><td>Type: </td><td><?php echo $mon_type;?></td></tr>
        <tr><td>Inch: </td><td><?php echo $mon_inch;?></td></tr>
        <tr><td>Aanschaf datum: </td><td><?php echo $monnewDate;?></td></tr>
        <tr><td>Aanschaf waarde: </td><td><?php echo "&euro;".number_format((float)$mon_a_prijs, 2, '.', '')."";?></td></tr>
    </table>
    <?php
}}else{
    echo "<i>Geen monitoren gevonden</i>";
}
?>

有谁知道它为什么不起作用,您能帮我理解并帮助我解决这个问题吗?

【问题讨论】:

  • 你得到了所有的行,但你没有将它们添加到一个数组中,你一直用最后一条记录覆盖$mon_* vars。
  • 好吧,我明白你的意思了,让我先尝试自己修复它,否则我不会从中学到任何东西;)
  • 当您使用它时,您可以删除if($id==$mon_comid) 语句,因为在这种情况下它是相当多余的。您仅使用 Com_ID 获取记录。 SQL 知道它在做什么。

标签: php variables pdo foreach


【解决方案1】:

我认为您不必在 while 循环中定义变量。以下为您节省了几行代码,如果您的数据库字段名清晰,您的代码就不会一团糟:

$sql = "SELECT * FROM IA_Monitor WHERE Com_ID = :id";
$query = $conn->prepare($sql);
$query->execute(array(':id' => $id));
$rows = $query->fetchAll(PDO::FETCH_ASSOC);

$value = count($rows);
if ($value != 0)
foreach($rows as $row){
    $monnewDate = date("d-m-Y", strtotime($row['Aanschaf_dat']));
    ?>
    <title><?php echo $value; ?></title>
    <table>
        <tr><td>Monitorbarcode: </td><td><?php echo $row['Barcode'];?></td></tr>
        <tr><td>Merk: </td><td><?php echo $row['Merk'];?></td></tr>
        <tr><td>Type: </td><td><?php echo $row['Type'];?></td></tr>
        <tr><td>Inch: </td><td><?php echo $row['Inch'];?></td></tr>
        <tr><td>Aanschaf datum: </td><td><?php echo $monnewDate; ?></td></tr>
        <tr><td>Aanschaf waarde: </td><td><?php echo "&euro;".number_format((float)$row['Aanschaf_waarde'], 2, '.', '')."";?></td></tr>
    </table>
    <?php
}else{
    echo "<i>Geen monitoren gevonden</i>";
}

这段代码应该可以工作。在此处将值添加到 $rows 之类的数组中

【讨论】:

  • 是的,你错过了一些括号,这无助于解决我的问题
  • 啊括号,当然。让我解决这个问题
  • 我认为第一个问题是$query-&gt;fetch() 的事情。应该是 fetchAll。其次是有一个支架什么也没做。问题操作复制并粘贴原始代码然后合并它。
  • 是的,我删除了括号并添加了一个,但我没有更改 fetch,现在可以使用了,谢谢!
  • 没问题!很高兴我能帮助你。祝你进一步编码荷兰同胞好运:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2017-12-22
  • 1970-01-01
  • 2013-11-06
相关资源
最近更新 更多