带有MySql PDO的while循环内的while循环

Posted

技术标签:

【中文标题】带有MySql PDO的while循环内的while循环【英文标题】:While loop inside of while loop with MySql PDO 【发布时间】: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 并运行您的第一个查询,看看会发生什么 【参考方案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注入,除了他的第一个查询是问题

以上是关于带有MySql PDO的while循环内的while循环的主要内容,如果未能解决你的问题,请参考以下文章

php while循环和foreach循环 mysql_fetch_array()

PDO 循环并打印 fetchAll

使用 While 循环内的多个输入元素和 While 循环外的单个提交按钮更新 MySQL 数据库

循环更新查询 pdo where id

循环内 PDO 语句的绑定参数

优化包含 PDO 查询的 while 循环