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

从SQLite数据库加载图片后页面无法显示其他内容求助

Hey Andreas, 我来帮你搞定这个问题!

你的问题根源很清晰:当你在get_icon函数里设置header("Content-Type: image/png")并直接echo图片二进制内容后,整个HTTP响应的内容类型就被强制设定为图片了。浏览器收到这个响应后,会把所有返回的内容都当作PNG图片的一部分来解析——后面的<p>Show further content...</p>自然就被当成无效的图片数据忽略掉了,所以看不到任何其他内容。

下面给你两种解决方案,优先推荐第一种(行业标准做法):


方案一:将图片作为独立资源引用(推荐)

这种方式性能更好,还能利用浏览器缓存,同时避免SQL注入风险(你的原始代码存在这个隐患!):

  1. 先修改get_image.php,让它可以直接通过URL参数处理图片请求:
<?php
function get_icon($id){
    $db = new PDO('sqlite:rdb.db3');
    // 重点:用预处理语句防止SQL注入,绝对不要直接拼接ID到SQL里!
    $sql = "SELECT * FROM icons WHERE _id = ?";
    $stmt = $db->prepare($sql);
    $stmt->execute([$id]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if($result){
        header("Content-Type: image/png");
        echo $result["bytes"];
    } else {
        // 找不到图片时返回404或默认图
        header("HTTP/1.1 404 Not Found");
        echo "Icon not found";
    }
}

// 直接处理外部请求
if(isset($_GET['id'])){
    get_icon($_GET['id']);
}
?>
  1. 然后修改show.php,用<img>标签引用这个独立的图片接口:
<?php
ini_set('display_errors',"1");
$id = $_GET['id'];
?>
<!-- 用img标签加载图片,浏览器会单独请求get_image.php -->
<img src="get_image.php?id=<?php echo htmlspecialchars($id); ?>" alt="User Icon">
<p>Show further content...</p>

方案二:使用Data URI嵌入图片(适合小图标)

如果非要在同一个响应里同时输出图片和HTML,可以把图片转成Data URI格式嵌入到页面中,但这种方式不适合大图片(会让HTML体积变大,影响加载速度):

  1. 修改get_image.php,让它只返回图片二进制数据,不输出header:
<?php
function get_icon_data($id){
    $db = new PDO('sqlite:rdb.db3');
    $sql = "SELECT * FROM icons WHERE _id = ?";
    $stmt = $db->prepare($sql);
    $stmt->execute([$id]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    return $result ? $result["bytes"] : false;
}
?>
  1. 然后在show.php中将二进制数据转成Data URI:
<?php
ini_set('display_errors',"1");
require_once 'get_image.php';
$id = $_GET['id'];
$iconData = get_icon_data($id);

if($iconData){
    $base64Data = base64_encode($iconData);
    $imageUri = "data:image/png;base64," . $base64Data;
} else {
    $imageUri = "path/to/default-icon.png"; // 替换成你的默认图路径
}
?>
<img src="<?php echo $imageUri; ?>" alt="User Icon">
<p>Show further content...</p>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:16:06