【问题标题】:While loop inside of while loop with MySql PDO带有MySql PDO的while循环内的while循环
【发布时间】:2021-12-28 21:12:19
【问题描述】:

我需要知道如何进行此查询,因为现在只显示每天的第一个值,而不是每天的全部值。

我需要第二个查询,同时显示当天的所有用户,依此类推

这里是我的查询:

//First While:
<?php
$sql = $conn->prepare("SELECT count(id) AS total, fTera, DATE_FORMAT(fTera, '%d') AS day, DATE_FORMAT(fTera, '%d %M %Y') AS date
FROM TERA WHERE MONTH(fTera) = MONTH(current_date) AND YEAR(fTera) = YEAR(current_date) AND active != 0
GROUP BY date ASC");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)){
    $fT = $row['fTera'];
    $paci = $row['total'];
        
?>
//Second While
    <?php
    $tera = $conn->prepare("SELECT *
    FROM TERA WHERE fTera = :fecha AND active != 0");
    $tera->bindParam(':fecha', $fT, PDO::PARAM_STR);
    $tera->execute();
    $tPaci = 0;
    while($row1 = $tera->fetch(PDO::FETCH_ASSOC)){
        if($paci != $tPaci):
    ?>
    <tr>
        <td class="center"><?php echo $row1['nombre']; ?></td>
    </tr>
    <?php
        endif;
        $tPaci++; 
        } 
    ?>
//End Second While

<?php } ?>

//End First While

【问题讨论】:

  • 您的第一个查询是错误的,不应该运行,看看您是否可以创建一个dbfiddle.uk 并运行您的第一个查询,看看会发生什么

标签: php mysql while-loop do-while


【解决方案1】:

我已经做到了

我更改了这个 WHERE 子句:

WHERE fTera = :fecha

到这个:

fTera >= '$fT' AND fTera < '$fT' + INTERVAL 1 DAY

现在的第二个查询是:

$tera = $conn->prepare("SELECT *
FROM TERA WHERE fTera >= '$fT' AND fTera < '$fT' + INTERVAL 1 DAY AND active != 0");
$tera->execute();
....

【讨论】:

  • 这很容易受到sql注入,除了他的第一个查询是问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2016-03-14
  • 2011-06-19
  • 1970-01-01
  • 2012-12-02
相关资源
最近更新 更多