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

MySQL Blob图片显示异常:不同ID记录均展示同一张图片

问题原因与解决方案

核心问题

  1. 模态框ID不匹配:你循环生成的按钮data-target是#myModal<?php echo $data['id_pemasukan']; ?>,但模态框的固定ID是#myModal,导致所有按钮都触发同一个模态框,自然只会显示第一次加载的id=1的图片。
  2. 查询ID未动态绑定:模态框内的SQL查询用的$id变量没有对应点击行的ID,始终查询同一个数据。

修复步骤

1. 为每行生成唯一模态框

在数据循环(遍历pemasukan表的循环)里,每个行对应一个带唯一ID的模态框,确保按钮和模态框的ID一一对应。

2. 动态使用当前行的ID查询数据

在模态框内的SQL查询中,直接使用当前循环的$data['id_pemasukan']作为查询条件,同时改用预处理语句避免SQL注入风险。

修正后的代码示例

<?php
$db = mysqli_connect("localhost","root","","ayam"); 
// 遍历数据的循环
$sql_data = "SELECT * FROM pemasukan";
$result_data = $db->query($sql_data);
while($data = mysqli_fetch_array($result_data)){
?>
<tr>
    <td>
        <!-- 按钮的data-target对应当前行的模态框ID -->
        <a href="#" type="button" class="fa fa-edit btn btn-primary btn-md" data-toggle="modal" data-target="#myModal<?php echo $data['id_pemasukan']; ?>"></a>
    </td>
</tr>

<!-- 当前行对应的唯一模态框 -->
<div class="modal fade" id="myModal<?php echo $data['id_pemasukan']; ?>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel<?php echo $data['id_pemasukan']; ?>">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title" id="myModalLabel<?php echo $data['id_pemasukan']; ?>">Foto Yang Diambil</h4>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
      </div>
      <div class="modal-body">
          <?php
          // 使用预处理语句查询当前行的图片
          $stmt = $db->prepare("SELECT foto FROM pemasukan WHERE id_pemasukan = ?");
          $stmt->bind_param("i", $data['id_pemasukan']);
          $stmt->execute();
          $stmt->bind_result($foto);
          $stmt->fetch();
          if($foto){
              echo '<img style=" margin: auto; display: block;" height="50%" width="50%" src="data:image/jpeg;base64,'.base64_encode($foto).'"/>';
          } else {
              echo "没有图片数据";
          }
          $stmt->close();
          ?>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Tutup</button>
      </div>
    </div>
  </div>
</div>
<?php } ?>

额外提示

  • 数据库连接只需初始化一次,放在循环之前即可,无需重复创建。
  • 始终使用预处理语句传递SQL参数,避免SQL注入漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:10:32