PHP - 存储为BLOB的图像显示为断开的链接

时间:2016-02-25 04:24:26

标签: php mysql image blob

我正在使用PHP处理商店应用程序,并且在显示存储在MySQL数据库上时遇到问题。我将图像存储为中BLOB类型,我确信图像在上传到数据库期间和之后都已正确格式化。 (我可以直接从数据库下载图像并将其视为jpeg图像)。

但是,如果我尝试在网页中显示我的图像,我会收到破碎的图像图标。我能够从sql中显示图片的唯一方法是使用base64编码,但这不是我想要使用的方法。

这是我的代码。它从数据库中提取所有产品,并在表格行中显示其ID,描述和图像。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<title>Image Test</title>
<body>
<?php
    include("mylibrary/login.php");
    login();
    $query = "SELECT prodid, description FROM products";
    $result = mysql_query($query) or die(mysql_error());

    echo "<table width=\"50%\" cellpadding=\"1\" border=\"1\">\n";
    echo "<tr><td>Product ID</td><td>Description</td><td>Image</td></tr>\n";
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        $prodid = $row['prodid'];
        $description = $row['description'];

        echo "<tr><td>$prodid</td><td>$description</td>\n";  
        echo "<td><img src=\"showimage.php?id=$prodid\" width=\"80\" height=\"60\"></td></tr>\n";
    }
    echo "</table>\n";
?>
</body>
</html>

这是showimage.php代码。 showimage.php文件仅显示损坏的图像。我查看了图像的原始数据,它们的格式都正确。 :

<?php
//header('Content-Type: image/jpeg');
   $prodid = $_GET['id'];
   $con = mysql_connect("localhost", "test", "test") or die('');
   mysql_select_db("store", $con);

   $query = "SELECT picture from products WHERE prodid=$prodid";
   $result = mysql_query($query);
   $row = mysql_fetch_array($result, MYSQL_ASSOC);
   $picture = $row['picture'];

   header("Content-type: image/jpeg");
   echo $picture;
?>

我非常感谢帮助理解为什么这段代码不起作用。我在这个网站和谷歌搜索中阅读了很多文章,他们都说这个代码应该有效。

作为旁注,我不想使用base64编码方法,因为我正在上课,这是我们正在使用的方法(我也是唯一遇到此问题的人) 。

1 个答案:

答案 0 :(得分:0)

通常,代码看起来几乎没问题。图片的问题是,它必须完全正确,否则无法正确显示。请尝试以下方法:

  • 使用“Content-Type:image / jpeg代替”Content-type:image / jpeg“
  • 删除结束标记?&gt;在showimage.php中 - 如果在结束标记之后有空格,那可能是你的问题。永远不要对仅使用PHP的文件使用结束标记。

如果这没有帮助,请删除内容类型的标题,并通过调用图片网址查看实际返回的内容,并将数据与原始图像进行比较。这样您就可以确认图片数据是正确的还是差异在哪里。