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

从MySQL获取数据时查询列仅返回单行且重复的问题

解决MySQL查询仅返回一行重复数据的问题

看起来你在从MySQL列获取数据生成下拉选项时,遇到了只返回一行且重复的情况,我来帮你一步步排查和解决:

首先排查核心问题点

1. 检查mapel类中tampil()方法的实现

最常见的问题是这个方法没有正确返回所有查询结果,而是只返回了单个值。比如如果你的方法是这么写的:

public function tampil() {
    $query = "SELECT nama_mapel FROM mapel WHERE tingkat = ?";
    $stmt = $this->db->prepare($query);
    $stmt->bind_param("s", $this->tingkat);
    $stmt->execute();
    $result = $stmt->get_result();
    // 错误:只获取了一行数据,返回单个字符串
    $row = $result->fetch_assoc();
    return $row['nama_mapel'];
}

这种情况下,方法只会返回第一条匹配的数据,如果你后续不小心重复输出这个值(比如多次写<option><?php echo $namaMapel; ?></option>),就会出现重复的同一行。

修正方法:让tampil()返回所有结果的数组:

public function tampil() {
    $query = "SELECT nama_mapel FROM mapel WHERE tingkat = ?";
    $stmt = $this->db->prepare($query);
    $stmt->bind_param("s", $this->tingkat);
    $stmt->execute();
    $result = $stmt->get_result();
    $mapelList = [];
    // 循环获取所有结果存入数组
    while ($row = $result->fetch_assoc()) {
        $mapelList[] = $row['nama_mapel'];
    }
    return $mapelList;
}

2. 修正前端循环输出的代码

如果你的tampil()已经返回了数组,但输出时没有正确循环,也会导致重复。比如之前的代码可能没有用循环,而是手动写了多个<option>标签,或者循环逻辑错误。

正确的输出代码:

<div id="Mapel"> 
    <label for="mapel">Mapel </label> 
    <button type="button" name="tambahMapel" id="tambahMapel" class="btn btn-info" title="Tambah Mapel">+</button> 
    <select name="mapel" class="form-control"> 
        <option selected>Pilih...</option> 
        <?php 
        require_once '../class/mapel.php'; 
        $mapel = new mapel(NULL,$tingkat); 
        $namaMapelList = $mapel->tampil(); 
        // 循环遍历数组,生成每个选项
        foreach ($namaMapelList as $nama) {
        ?>
        <option value="<?php echo $nama; ?>"><?php echo $nama; ?></option>
        <?php } ?>
    </select>
</div>

3. 数据库层面的排查

  • 先登录MySQL,手动执行查询语句:SELECT nama_mapel FROM mapel WHERE tingkat = '你的tingkat值';,看看返回的结果是不是真的有多条,还是数据库里本身只有一条数据。
  • 如果查询结果里有重复的行(比如同一个nama_mapel对应同一个tingkat出现多次),可以在查询语句中加入DISTINCT来去重:SELECT DISTINCT nama_mapel FROM mapel WHERE tingkat = ?;

总结

大概率是你的数据获取方法没有返回完整的结果集,或者输出时没有正确循环遍历结果。按照上面的步骤逐一排查,应该就能解决问题啦!

内容的提问来源于stack exchange,提问作者ahmad reza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:20