Php 我正在尝试显示我使用longblob和PDO上传到数据库的图像

Php 我正在尝试显示我使用longblob和PDO上传到数据库的图像,php,sql,pdo,blob,Php,Sql,Pdo,Blob,我试着用longblob和PDO显示我上传到数据库的图像,但我总是看到一个黑屏,中间有一个白色的小正方形。 代码如下: <?php include('snippets/startDB.php'); include('snippets/Session.php'); $PicNum = $_GET["PicNum"]; echo($PicNum); $id = $_SESSION['id']; $stmt = $dbh-&g

我试着用longblob和PDO显示我上传到数据库的图像,但我总是看到一个黑屏,中间有一个白色的小正方形。 代码如下:

<?php
    include('snippets/startDB.php');
    include('snippets/Session.php');
    
    $PicNum = $_GET["PicNum"]; echo($PicNum);
    $id = $_SESSION['id'];
    $stmt = $dbh->prepare('SELECT imagem FROM aluno WHERE id= ?');
    $stmt->execute(array($PicNum));
    $row = $stmt->fetch();


    Header( 'Content-type: image/gif');
     echo $row['imagem'];
?>

我认为保存文件工作正常,因为上传图像时数据库中会出现一个文件。 我的保存文件:

<?php

$imagem = $_FILES["imagem"];
include('snippets/startDB.php');
include('snippets/Session.php');

if($imagem != NULL) {
    $nomeFinal = time().'.jpg';
    if (move_uploaded_file($imagem['tmp_name'], $nomeFinal)) {
        $tamanhoImg = filesize($nomeFinal);

        $mysqlImg = addslashes(fread(fopen($nomeFinal, "r"), $tamanhoImg));

        if($_SESSION['tipo']== 'Aluno'){
            $stmt = $dbh->prepare('UPDATE aluno SET imagem = ? WHERE id = ?');
            
            $stmt->execute(array($mysqlImg, $_SESSION["id"]));
            
        }else if($_SESSION['tipo']== 'Professor'){
            $stmt = $dbh->prepare('UPDATE professor SET imagem = ? WHERE id = ?') ;
            
            $stmt->execute(array($mysqlImg, $_SESSION["id"])) ;

        }
        
         header("location:perfil_aluno.php");
    }
}
else {
    echo"Erro!";
}

?>


您确定图像是gif(不是jpeg和png)吗?请同时更改
$PicNum=$\u GET[“PicNum”];echo($PicNum)
$PicNum=$\u GET[“PicNum”]要查看效果,请删除回声并将其从gif更改为png,同时尝试使用jpg也不起作用。该文件存储在数据库中,但也出现在我认为不受支持的网页的本地文件夹中。“也出现在我认为不受支持的网页的本地文件夹中”-这正是
move\u uploaded\u file()
所做的。您还可以对二进制文件应用
addslashes()
,在最好的情况下,它可以完成任何事情,在最坏的情况下,它会破坏图片。是的,我看到我可能会从目录加载图像,而不是将其发送到数据库