You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据库有多条数据时如何仅回显一次数据?附现有代码

解决数据库多条数据仅回显一次的问题

首先得指出你现有代码里的两个核心问题:一是只执行了一次mysqli_fetch_array($query),所以循环里每次输出的都是同一条数据;二是循环的写法不对,没有正确遍历所有查询结果。下面给你两种实现“仅回显一次数据”(也就是去重)的方案,同时修正遍历逻辑:

方案一:SQL层面直接去重(推荐,效率更高)

直接在SQL查询中使用DISTINCT关键字,让数据库返回不重复的namaproduk结果,从源头上避免重复数据:

// 先处理SQL注入风险,这一步一定要做!
$produk = mysqli_real_escape_string($con, $produk);
// 只查询需要的字段+DISTINCT去重,比SELECT *更高效
$sql = "SELECT DISTINCT namaproduk FROM tbproduk WHERE namaproduk LIKE '$produk%'";
$query = mysqli_query($con, $sql) or die("error $sql");

// 正确遍历所有结果的方式:用while循环不断取数据,直到没有更多结果
while ($result = mysqli_fetch_array($query)) {
    $namaproduk = $result['namaproduk'];
    echo "<button style='color: black;text-align: left'><a style='padding: 0;line-height: 0;color: black;background: none' href='Konfirmasi/index4.php?produk=$namaproduk'>".$namaproduk."</a></button>";
}

小贴士:更安全的做法是使用预处理语句来彻底避免SQL注入,上面用mysqli_real_escape_string是基础的防护方式;另外如果不需要表中其他字段,尽量不要用SELECT *,只查询需要的字段能减少数据传输,提升性能。

方案二:PHP层面过滤重复数据

如果因为业务限制不能修改SQL,可以在PHP里用一个数组记录已经输出过的产品名,避免重复输出:

$produk = mysqli_real_escape_string($con, $produk);
$sql = "SELECT * FROM tbproduk WHERE namaproduk LIKE '$produk%'";
$query = mysqli_query($con, $sql) or die("error $sql");

// 用数组存储已经输出过的产品名
$displayedProducts = [];

while ($result = mysqli_fetch_array($query)) {
    $namaproduk = $result['namaproduk'];
    // 检查当前产品名是否已经输出过
    if (!in_array($namaproduk, $displayedProducts)) {
        echo "<button style='color: black;text-align: left'><a style='padding: 0;line-height: 0;color: black;background: none' href='Konfirmasi/index4.php?produk=$namaproduk'>".$namaproduk."</a></button>";
        // 将已输出的产品名加入数组
        $displayedProducts[] = $namaproduk;
    }
}

为什么你的原代码会重复输出同一条?

你原来只调用了一次mysqli_fetch_array($query),这个函数每次调用才会从结果集中取下一条数据,而你在for循环里没有再次调用它,所以循环的每一次都是在用第一次取到的那条数据,自然只会重复输出同一条内容。

内容的提问来源于stack exchange,提问作者Eric Anthony Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:26:28