PHP从MySQL数据库显示图片失败求助:图片显示为编码内容
解决PHP从MySQL LongBlob显示图片的问题
你的代码存在几个关键问题,导致图片无法正常显示,修正方案如下:
问题点及修复
- 变量名笔误:循环中定义的变量是
$row,但引用图片时写成了$rows['image'],导致无法正确读取图片数据。 - 未对二进制数据编码:LongBlob存储的是原始二进制图片数据,必须通过
base64_encode()转换为Base64字符串,才能嵌入到data URI中。 - 缺少具体MIME类型:
data:image;base64需要指定图片的实际类型(如image/jpeg、image/png),否则浏览器无法正确解析。
修正后的完整代码
<body> <?php // 建立数据库连接并检查错误 $con = mysqli_connect('localhost','root','','warframe'); if (!$con) { die("数据库连接失败: " . mysqli_connect_error()); } // 查询数据 $load = mysqli_query($con, "SELECT * FROM frames"); while ($row = mysqli_fetch_assoc($load)) { // 将二进制图片数据转为Base64编码 $imageBase64 = base64_encode($row['image']); // 替换为你实际的图片MIME类型,如image/png、image/gif $imageMime = "image/jpeg"; $imageSrc = "data:$imageMime;base64,$imageBase64"; // 输出内容 echo "<div class='content'> <div class='frame'> <img src='{$imageSrc}' alt='{$row['frame_name']}'> <div class='frame__name'> <p>{$row['frame_name']}</p> </div> </div> </div>"; } mysqli_close($con); ?> </body>
额外建议
- 如果数据库中存储的图片类型不统一,建议新增
image_mime字段(varchar类型),存储对应图片的MIME类型,这样可以动态生成正确的data URI:$imageSrc = "data:{$row['image_mime']};base64,$imageBase64"; - 确认存入数据库的是原始二进制图片数据,而非提前Base64编码后的字符串,否则会出现重复编码导致的显示异常。
- 可添加空值判断,避免图片字段为空时输出无效的图片链接。
内容的提问来源于stack exchange,提问作者Alpi
相关产品推荐
相关产品推荐

