【问题标题】:How do i display images stored as blob data type in mysql with php? [closed]如何使用 php 在 mysql 中显示存储为 blob 数据类型的图像? [关闭]
【发布时间】:2014-10-02 07:29:24
【问题描述】:

如何将存储在 mySQL 数据库中的图像显示为 BLOB? 到目前为止它尝试了什么: 1.创建一个新的php函数/文件来获取图片(getpicture.php)。 2.在html中,我有如下代码:

<img src="getpicture.php?id=2" border ="0" height="250" width="250" /> 




/*below is the getpicture.php*/
<?php

@ $db = new MySQLi('localhost','root','','myDatabase');

if(mysqli_connect_errno()) {
    echo 'Connection to database failed:'.mysqli_connect_error();
    exit();
}

if(isset($_GET['People_Id'])) {

    $id = mysqli_real_escape_string($_GET['People_Id']);
    $query = mysqli_query("SELECT * FROM 'people' WHERE 'People_Id' = '$id'");

    while($row = mysqli_fetch_assoc($query)) {
        $imageData =$row['image'];
    }

    header("content-type: image/jpeg");
    echo $imageData;
    echo $id;
}

else {
    echo "Error!";
    echo $id;
}

?>

代码有什么问题?请帮忙!

【问题讨论】:

  • 您将表和列视为值;删除引号。
  • 这个SELECT * FROM 'people' WHERE 'People_Id'去掉所有的单引号或者使用反引号`
  • 如果People_Id 是一个数字字段,也删除'$id' 中的引号。
  • 您也没有将数据库连接传递给您的$id
  • 而mysqli_real_escape_string 确实不阻止注入,你的代码很容易受到攻击。请改用准备好的语句。

标签: php html image blob jpeg


【解决方案1】:

这是错误的:

$query = mysqli_query("SELECT * FROM 'people' WHERE 'People_Id' = '$id'");

您对表名使用了错误的引号(必须是反引号而不是单引号(请参阅 tylda ~ 键)。请参阅文档:http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

这也是错误的

header("content-type: image/jpeg");
echo $imageData;
echo $id;

去掉最后一个 echo $i; 并用 exit(); 替换它,否则你会破坏你刚刚发送的图像数据流。

【讨论】:

  • 我很高兴我没有输入“答案”本身。我只猜对了 50%。
  • 然而; “必须是反引号而不是单引号” - “必须” 部分适用于使用保留关键字或包含空格作为单词分隔符或(连字符)减号(视为进行数学/减法运算)的情况。尽管这样做是个好习惯。 哦, 你错过了one ;)
  • 我根据您上面的建议修复了所有错误的代码。使用 blob 数据类型显示来自 mySQL 的图像更近了一步。现在,它显示一个图标(右下角带有撕毁的小图像图标),就好像 php 无法从数据库中检索任何数据一样。我将 .jpg 图像作为 BLOB 数据类型存储在 mySQL 中的“图像”列名中。任何线索为什么会这样做???
【解决方案2】:

很多都是错的。

  1. 您的 SQL 错误。从表格和列中删除单引号并替换为反引号。
  2. 虽然它可能仍然有效,但您应该在标题后添加几行新行
  3. 您不应在回显图像数据后回显您的 $id。
  4. 检查 isset 时检查的值有误
  5. 另外,你应该为 mysqli 使用 OOP
  6. 由于您的图像数据只有一行,因此您无需将其包装在 while 循环中

这是一个更新的代码示例

<?php

$db = new MySQLi('localhost', 'user', 'password', 'myDatabase');

if ($db->connect_errno) {
    echo 'Connection to database failed: '. $db->connect_error;
    exit();
}

if (isset($_GET['id'])) {

    $id = $db->real_escape_string($_GET['id']);
    $result = $db->query("SELECT * FROM `people` WHERE `People_Id` = '$id'");

    $row = $result->fetch_assoc();
    $imageData = $row['image'];

    header("Content-type: image/jpeg\n\n");
    echo $imageData;
}

else {
    echo "Error!";
}

【讨论】:

  • 虽然您确实修复了许多real_escape 问题;在错误的枚举中没有提到它。根据my comment - 不过这看起来不错;)
  • 我根据您上面的建议修复了所有错误的代码。使用 blob 数据类型显示来自 mySQL 的图像更近了一步。现在,它显示一个图标(右下角带有撕毁的小图像图标),就好像 php 无法从数据库中检索任何数据一样。我将 .jpg 图像作为 BLOB 数据类型存储在 mySQL 中的“图像”列名中。任何线索为什么会发生这种情况???
【解决方案3】:

我回答了我自己的问题,它现在正在工作..

下面是getpicture.php:

<?php

$db = new MySQLi('localhost', '', '', 'mydatabase');

if ($db->connect_errno) {
    echo 'Connection to database failed: '. $db->connect_error;
    exit();
}

if (isset($_GET['id'])) {

$id = $db->real_escape_string($_GET['id']);

$query = "SELECT `Picture` FROM member WHERE `Id` = '$id'";

$result = $db->query($query);

while($row = mysqli_fetch_array($result)) {
    $imageData = $row['Picture'];
    header("Content-type:image/jpeg");
    echo $imageData;
}

} ?>

获取上面getpicture.php的php脚本如下:

echo '<img src="getpicture.php?id=' . htmlspecialchars($_GET["id"]) . '"border ="0" height="250" width="250" />';

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 2014-01-05
    • 2016-02-09
    • 2013-08-20
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多