PHP读取MySQL BLOB类型员工图片显示异常问题求助
BLOB类型员工图片加载失败问题排查
两段代码的核心错误
代码1(图片字段空白)问题点
<img>标签用法错误:该标签不存在value属性,图片资源地址必须写入src属性才能被浏览器识别渲染,直接把二进制BLOB内容塞进无效属性自然不会显示内容。- 字段取值错位:你用
mysql_fetch_row按索引取SELECT *的返回结果时,默认按表字段的建表顺序返回值,你默认索引1对应Imagen字段,一旦表结构中Imagen不是第二列,取到的根本不是图片二进制数据。 - 冗余查询未生效:你单独写了查询图片的
$consuimg语句,但没有对该查询结果执行fetch取值操作,写的查询完全没被用上。
代码2(图片显示破损)问题点
- Data URI格式不合法:base64格式的内嵌图片必须遵循
data:[图片MIME类型];base64,[base64编码内容]的标准格式,你只写了data:前缀,缺少图片MIME类型声明和;base64,分隔标识,浏览器无法正确解析数据,就会显示破损图片占位符。 - 风险提示:你当前使用的
mysql_*系列函数是PHP早已废弃并在高版本完全移除的扩展,且代码直接拼接请求参数存在严重SQL注入漏洞,建议尽快替换为mysqli或PDO扩展,使用预处理语句执行查询。
修复后参考代码
<?php // 注:以下仅修正当前逻辑错误,生产环境请更换为mysqli/PDO预处理查询,彻底防范SQL注入 $con = mysql_connect("sql213.epizy.com","epiz_31980107","l20DHKEhYd"); if (!$con){die("数据库连接失败: ".mysql_error());} $db = mysql_select_db("epiz_31980107_certificaciones",$con); if (!$db) {die("数据库选择失败: ".mysql_error());} // 对传入参数做转义,简单防护注入 $matricula = mysql_real_escape_string($_REQUEST['matricula']); // 合并员工基础信息和图片查询,减少重复查表 $emp_sql = "SELECT NoReloj, Imagen, Area FROM empleado WHERE NoReloj='".$matricula."'"; $emp_result = mysql_query($emp_sql, $con); $emp_info = null; if(mysql_num_rows($emp_result) > 0){ $emp_info = mysql_fetch_assoc($emp_result); } // 查询证书信息 $cert_sql = "SELECT Certificacion, Fecha_Cert, Fecha_Ven FROM certificaciones WHERE empleado_id='".$matricula."'"; $cert_result = mysql_query($cert_sql, $con); ?> <!-- 图片渲染部分,请根据实际存储的图片格式修改MIME类型:jpeg对应image/jpeg,png对应image/png --> <?php if($emp_info && !empty($emp_info['Imagen'])): ?> <img src="data:image/jpeg;base64,<?php echo base64_encode($emp_info['Imagen']); ?>" alt="员工照片" style="max-width: 150px;"> <?php endif; ?> <table align="center"> <tr> <td>工号</td> <td>所属区域</td> </tr> <tr> <td><input type="text" name="matricula" value="<?php echo $emp_info['NoReloj'] ?? ''; ?>" disabled></td> <td><input type="text" value="<?php echo $emp_info['Area'] ?? ''; ?>" disabled></td> </tr> </table>
额外排查方向
如果调整格式后图片仍显示破损,可做两步校验:
- 输出
base64_encode($emp_info['Imagen'])的结果,和本地原始图片转base64的内容做对比,如果结果不一致,说明图片入库时就存在数据丢失,需要检查上传存储BLOB的逻辑 - 确认代码中写的MIME类型和实际存储的图片格式完全匹配,比如存的是png图片就不能写
image/jpeg
内容的提问来源于stack exchange,提问作者Alberto Cruz
相关产品推荐
相关产品推荐

