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

如何使用PDO配合PHP MySQL在表单字段中展示存储为BLOB的图片

问题原因梳理

  1. 核心问题:input type="file" 不支持设置value属性,HTML规范中该字段的value为只读属性,仅可由用户本地选择文件时自动赋值。你直接将二进制的BLOB内容传入该属性,就会出现乱码。
  2. 若你的表单img标签是直接写在HTML上下文中(而非PHP echo输出的字符串),你写的.base64_encode($row['TeamLogo']). 属于PHP字符串拼接语法,直接放在HTML里不会被解析执行,会原样输出导致src地址无效,图片无法加载。
  3. 额外风险:你当前的PDO预处理写法存在SQL注入风险,prepare语句中直接拼接了$id参数,预处理的占位符功能完全没生效。

修复方案

1. 修正PDO预处理写法

<?php   
if(isset($_GET['id']) && !empty($_GET['id'])) {
    $id = $_GET['id'];   
    $conn = new PDO("mysql:host=localhost; dbname=e0912343_Fixtures", 'e0912343_Admin1','AdminPhp1');   
    // 预处理语句用占位符,不要直接拼接变量
    $query = $conn->prepare("SELECT * FROM Teams WHERE TeamID = :TeamID");
    $query->execute(array(':TeamID'=>$id));
    $row = $query->fetch(PDO::FETCH_ASSOC); // 单条查询不需要循环,直接取结果
}
?>

2. 修正表单图片部分代码

不要给file输入框设value,已存储的图片单独做预览展示,用户若要修改直接选择新文件即可,后端判断如果没有新文件上传则保留原有图片:

<tr>
  <!-- 现有图片预览 -->
  <td>
    <img src="data:image/png;base64,<?php echo base64_encode($row['TeamLogo']); ?>" width="50px" height="50px" alt="团队logo">
  </td>
  <!-- 图片上传入口,不要加value属性 -->
  <td>
    <input type="file" name="TeamLogo" accept="image/*">
  </td>
</tr>

3. 补充表单提交后的后端逻辑

// 表单提交后处理逻辑示例
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $teamName = $_POST['TeamName'];
    $updateFields = ["TeamName = :TeamName"];
    $params = [':TeamName' => $teamName, ':TeamID' => $id];

    // 只有用户上传了新文件的时候才更新logo字段
    if (!empty($_FILES['TeamLogo']['tmp_name'])) {
        $logoContent = file_get_contents($_FILES['TeamLogo']['tmp_name']);
        $updateFields[] = "TeamLogo = :TeamLogo";
        $params[':TeamLogo'] = $logoContent;
    }

    // 拼接更新SQL执行
    $updateSql = "UPDATE Teams SET " . implode(',', $updateFields) . " WHERE TeamID = :TeamID";
    $updateQuery = $conn->prepare($updateSql);
    $updateQuery->execute($params);
}

额外优化点

如果你的系统支持多种格式的图片(jpg、gif等),可以在存储BLOB的时候同时存储图片的MIME类型,输出的时候替换data:image/png中的png为实际存储的MIME类型,避免部分格式的图片无法加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:24:08