从 SQL 数据库中检索 varbinary 图像

Posted

技术标签:

【中文标题】从 SQL 数据库中检索 varbinary 图像【英文标题】:Retrieve varbinary image from SQL database 【发布时间】:2017-10-15 02:56:27 【问题描述】:

我创建了一个非常简单的 php 和 SQL 博客。我在数据库中有以下字段:post_title、post_content、post_category、post_date、post_image、user_name。 post_image 字段是 VARBINARY(255)。我可以成功地将文件上传到数据库中,但是之后如何检索并显示它?这是显示博客的代码。我想在h2标签上方显示图片:

<?php
while($column = mysqli_fetch_assoc($post))
?>
<h2 class="post-title"><?php echo $column["post_title"]?></h2>
<div class="view-post-content"><?php echo $column["post_content"]?></div>
<p class="category">Category: <?php echo $column["post_category"]?></p>
<p>This post was written <?php echo $column["post_date"]?> by <?php echo $column["user_name"]?>.</p>
<a href="edit_post.php?id=<?php echo $column['post_id'] ?>">Edit</a> | <a href="delete_post.php?id=<?php echo $column['post_id'] ?>" onclick="return confirm('Are you sure?')">Delete</a>
<hr>
<?php

?>

【问题讨论】:

【参考方案1】:

两种方式:

1- 创建另一个 php 仅用于加载 varbinary:

例如load_img.php:

<?php

...
if(isset($_REQUEST['id'])) 
$sql = "SELECT post_mime, post_image FROM post WHERE post_id=" . $_GET['id'];
$result = mysqli_query("$sql");
$row = mysqli_fetch_array($result);
header("Content-type: " . $row["mime"]);
echo $row["img"];

mysql_close($conn);

在你的 H2 之上:

echo '<img src="load_img.php?id='.$column['post_id'].'" />';

2- 或使用 base64 css:

echo '<img src="data:image/jpeg;base64,'.base64_encode( $column['post_image'] ).'"/>';

我会推荐一个新字段来存储 mimetype(jpg、png、gif 等...)

【讨论】:

使用第二种方法仍无法显示图像。我是否也必须将图像上传到目录,还是可以将其存储在数据库中? @Julian 你可以将它存储在数据库中 - 尽管将它存储在文件系统中更为常见而不是。如果图像很小(低于 100k),那么任何一种方法都可以, @Julian 第二种方法有一个天然的缺点,因为某些浏览器对 base64 图像有限制。你可以在这里测试图片:base64-image.de

以上是关于从 SQL 数据库中检索 varbinary 图像的主要内容,如果未能解决你的问题,请参考以下文章

将 varbinary 更新到现有 SQL 列(添加到现有图像)?

将图像上传到 sql server 上的 varbinary 字段时,file_get_contents 值中的“附近语法不正确”

C#/SQL:从 DataGridView 到 Picturebox 的 Varbinary(max) 列

将 Matlab 数组存储在 SQL Server varbinary 字段中

从数据类型varbinary到日期SQL服务器的隐式转换

错误 java.sql.SQLException:从数据库中检索 Blob(图像)时 SQLite JDBC 驱动程序未实现