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

MySQL Blob类型头像无法在HTML页面显示问题排查求助

头像图片无法显示的问题排查与解决

我尝试在网站上展示上传至MySQL数据库的头像图片,但图片无法正常显示(效果见截图:图片无法显示的截图)。

从数据库获取信息的代码

<?php
    session_start(); // start the session
    include('config.php');  
    if(!isset($_SESSION['email'])){ // check if user is not logged in
        header('Location: login.php'); // redirect to login page
        exit(); // prevent further execution of the script
    }

    $email = $_SESSION['email']; // get the email from session
    $sql = "select * from profile where email_id = '$email'"; // select user's information from the database
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result);
    
?>

展示图片及其他信息的代码

<?php
if($row['images']) {
   echo '<img src="uploaded_img/'.$row['images'].'" class="image" alt="" style="border-radius: 20px;">';
} else {
   echo '<img src="images/default-avatar.png" class="image" alt="" style="border-radius: 20px;">';
}
?>
         <h3><?php echo $row['name']; ?></h3>
         <p>Email: <?php echo $row['email_id']; ?></p>
    <p>Country: <?php echo $row['country']; ?></p>
    <p>Religion: <?php echo $row['religion']; ?></p>
    <p>Caste: <?php echo $row['Caste']; ?></p>
    <p>Zodiac: <?php echo $row['zodiac']; ?></p>
    <p>Religion: <?php echo $row['religion']; ?></p>
    <p>Mobile Number: <?php echo $row['mobile_number']; ?></p>
    <p>Landline: <?php echo $row['Landline']; ?></p>

数据库中图片字段类型为Blob,图片路径正确且能正常显示文件名,请问问题出在哪里及原因是什么?


问题核心原因

你的代码逻辑和数据库存储方式完全不匹配:

  • 数据库images字段是Blob类型,存储的是图片的二进制原始数据;但你在前端展示时,却把它当成了文件名,直接拼接成uploaded_img/文件名的URL去请求服务器上的文件——服务器根本没有这个文件,自然加载失败。

两种可行解决办法

方案1:修改存储逻辑(更推荐)

Blob存储二进制图片会导致数据库体积暴涨、读写效率下降,实际开发中很少用。建议改成:

  1. 上传图片时,把文件直接保存到服务器的uploaded_img目录
  2. 数据库images字段改为VARCHAR类型,只存储图片的文件名(比如user_avatar_123.jpg)
  3. 保持你现在的前端展示代码不变,就能正常加载图片。

方案2:读取Blob数据直接输出(适合必须存数据库的场景)

如果一定要用Blob存储,需要单独写一个PHP接口来输出图片二进制内容:

  1. 创建get_avatar.php文件:
<?php
session_start();
include('config.php');
if(!isset($_SESSION['email'])){
    header('Location: login.php');
    exit();
}
$email = $_SESSION['email'];
$sql = "SELECT images FROM profile WHERE email_id = '$email'";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result);
// 根据图片实际类型调整Content-type,比如image/png、image/webp
header("Content-type: image/jpeg");
echo $row['images'];
?>
  1. 修改前端展示图片的代码:
if($row['images']) {
   echo '<img src="get_avatar.php" class="image" alt="" style="border-radius: 20px;">';
} else {
   echo '<img src="images/default-avatar.png" class="image" alt="" style="border-radius: 20px;">';
}

额外提醒

你的查询代码存在SQL注入风险,建议改用预处理语句:

$stmt = $con->prepare("SELECT * FROM profile WHERE email_id = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_array();

内容的提问来源于stack exchange,提问作者Sarathchandra M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:10:23