如何从MySQL中读取并展示存储为MEDIUMBLOB格式的网页图片
问题根因与修复方案
你代码存在2个核心错误导致图片无法正常渲染:
- Data URI 格式不符合规范:浏览器要求嵌入的二进制图片内容必须经过base64编码,且需要在MIME类型后加
;base64标识,你直接输出MEDIUMBLOB存储的原始二进制内容无法被解析。 - PHP字符串拼接语法错误:单双引号混用导致字符串提前闭合,img标签没有被正确拼接进
$html变量。
修正后的代码示例
$sql = "SELECT * FROM table_name ORDER BY record_id DESC"; $stmt = $db->stmt_init(); if ($stmt->prepare($sql)) { $stmt->execute(); $stmt->bind_result($record_id, $image_name, $image_type, $image_size, $image_content); $stmt->store_result(); if (!$stmt->num_rows) { // 做错误检查逻辑 } else { while ($stmt->fetch()) { // 二进制内容base64编码,补全Data URI格式,修正字符串拼接 $base64Img = base64_encode($image_content); $html = '<p>Image Name: '.htmlspecialchars($image_name).'<br>Image Type: '.htmlspecialchars($image_type).'<br> Image Size: '.htmlspecialchars($image_size).'</p> <img src="data:'.$image_type.';base64,'.$base64Img.'" alt="'.htmlspecialchars($image_name).'">'; // 此处加你后续处理$html的逻辑 } } $stmt->close(); }
额外排查点
如果修改后还是无法显示,按以下步骤排查:
- 确认你存储图片到MEDIUMBLOB时,没有往二进制内容里插入多余的换行、空格、BOM头等冗余字符
- 验证
$image_type的值是合法的MIME类型,比如image/jpeg、image/png,不能是后缀名如jpg、png
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

