MySQL Blob图片显示异常:不同ID记录均展示同一张图片
问题原因与解决方案
核心问题
- 模态框ID不匹配:你循环生成的按钮
data-target是#myModal<?php echo $data['id_pemasukan']; ?>,但模态框的固定ID是#myModal,导致所有按钮都触发同一个模态框,自然只会显示第一次加载的id=1的图片。 - 查询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">×</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
相关产品推荐
相关产品推荐

