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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:18:16