循环通过 mysqli 行但只有没有重复

Posted

技术标签:

【中文标题】循环通过 mysqli 行但只有没有重复【英文标题】:Looping through mysqli row but only no duplicates 【发布时间】:2018-08-26 09:03:13 【问题描述】:

我有一个存储了相机详细信息的数据库,我想遍历数据库的行并根据相机型号创建复选框,但是如果复选框已经存在相同的相机型号,我不想要很多复选框被创建以便限制为只有一个。

我很感激任何可以指导我实现它的帮助!

提前致谢!

<?php
    $checkquery = "SELECT * FROM markers WHERE session_id = '".$_SESSION["id"]."'";
    $result = mysqli_query($connection,$checkquery);
    if (!$result) 
      die('Invalid query: ' . mysqli_error());
    
    echo '<form>';
    echo "<h3>Camera Model: </h3>";
    while ($row = @mysqli_fetch_assoc($result))
        echo '<label>'.$row['model']. '</label>'.'<input type="checkbox" name="categories" value='.$row['model'].' >';
    
    echo '</form>';
?>

【问题讨论】:

【参考方案1】:

您可以通过 SQL 查询使用DISTINCT...

    $checkquery = "SELECT DISTINCT model 
                    FROM markers 
                    WHERE session_id = '".$_SESSION["id"]."'";

但也要考虑使用准备好的语句和绑定变量来使您的应用程序更安全。

更新: 还有一些其他的东西......

    while ($row = mysqli_fetch_assoc($result))
        echo '<label>'.$row['model']. '</label>'.'<input type="checkbox" name="categories" value="'.$row['model'].'" >';
    

正如 Syscall 在评论中指出的那样, value 属性应该有引号。

并且请停止在您的代码中使用@,这会隐藏各种应该修复而不是隐藏的问题。

【讨论】:

谢谢!它奏效了,我对所有这一切都很了解,所以我边走边学!我假设 DISTINCT 只是意味着它返回不同的值,所以没有重复? 还可能表示value 属性值周围缺少引号。 感谢@Syscall,添加了这一点以及关于不使用@ 的另一条评论。 如果这回答了您的问题,请考虑将其标记为已回答 - meta.stackexchange.com/questions/5234/…

以上是关于循环通过 mysqli 行但只有没有重复的主要内容,如果未能解决你的问题,请参考以下文章

如何在for循环中获取json数据以进行显示[重复]

如果在循环中使用 MySQLi 准备好的语句,我啥时候调用 bind_param?

数据阅读器有行但没有填充组合框

PHP在循环中准备语句和事务[重复]

通过Wordpress循环通过ID循环CPT

PHP MySQLi While 循环