PHP - 将Mysql中的blob转换为图片

3

我已经阅读了很多帖子,但出于某种原因它仍然无法工作。就像标题中所述,我想在网站上显示存储在MySQL中的图像,该图像以MEDIUM BLOB形式存储。以下是上传图像的代码:

if (isset($_FILES["fileToUpload"]["tmp_name"])) {
    if(getimagesize($_FILES["fileToUpload"]["tmp_name"]) == FALSE)
        echo '<p style="color: red" >No file selected</p>';
    else {
        echo '<p style="color: red" >SELCETED</p>';
        $image= addslashes($_FILES["fileToUpload"]['tmp_name']);
        //$imageName= addcslashes($_FILES["fileToUpload"]['name']);
        $image = file_get_contents($image);
        $image = base64_encode($image);
    }
}

if (isset($_POST['trescText']) )
    $trescText=$_POST['trescText'];

if($titleText != ""&& $trescText != "") {
    $stmt = $conn->prepare("INSERT INTO blog (title,cykl,tresc, image) VALUES('$titleText','$cyklText','$trescText','$image')");
    $stmt->execute();
    header('Location: addPost.php');
}

$conn->close();

展示它的代码:

<?php
$stmt = $conn->prepare("SELECT image FROM blog WHERE id='98'");
$stmt->execute();
$stmt->bind_result($image);
while ($stmt->fetch()) {
    // echo '<img src="data:image;base64,'$image' "/>';
    echo '<img src="data:image/jpeg;base64,'.base64_encode($image) .'" />';
}
?>

问题在于,我得到的不是原始图片,而是这个:

enter image description here


1
你需要对图片进行两次base64编码,一次是在将其插入数据库时,另一次是在将其发送到浏览器时。 - arkascha
除此之外,还要警告一句:你的代码非常容易受到 SQL 注入攻击的威胁。 - arkascha
@BoundaryImposition 在我看来,那不是一个完整的答案,我只是暗示了原因。这就是为什么它肯定应该是一个评论。一个完整的答案应该包含修复后的代码。 - arkascha
@arkascha:不,评论是用来请求澄清和批评帖子的。在评论部分提供技术解决方案是错误的,因为您绕过了整个同行评审系统,这是该网站的基础。 (“完整答案应包含固定代码。”这也是有争议的;这不是个人帮助台或免费咨询服务。教会一个人钓鱼。)如果您还没有准备好编写完整的答案,可以将其留给那些准备好的人!谢谢。 - Lightness Races in Orbit
2
我建议您开始阅读所使用工具的文档:http://php.net/manual/zh/mysqli.quickstart.prepared-statements.php - arkascha
显示剩余9条评论
1个回答

2

您把它进行了两次base64编码:一次是在将其插入数据库时,另一次是在将其发送到浏览器时。

Base64编码具有实际结果;也就是说,它会转换数据。它不是临时的。您数据库中的数据是图像字节的base64表示形式,并且这是稍后使用SELECT提取的相同数据。

因此,您只需要进行一次编码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接