我正在阅读一些关于如何将我的图像上传到数据库中作为二进制文件的教程,而不是将它们放在服务器本身,我得到它的工作原理如下:
$image = chunk_split(base64_encode(file_get_contents($tmpfile)));
mysql_query("INSERT INTO images (`img_location`, `caption`, `user`, `genre`, `when`) VALUES ('$image', '$caption', '$id', '$genre', '$when')");
我的问题是你现在如何从数据库中提取它,我已经阅读了几种方法,尝试了所有方法,无法搞清楚,我没有得到MySQL错误,这就是我如何尝试它:
$get_pics = mysql_query("SELECT * FROM images WHERE user='$id' ");
while($get_pics2 = mysql_fetch_array($get_pics))
{
$sixfour_enc = base64_decode($get_pics2['img_location']);
$new .= "";
}
这样做……有点,正在发生的是它在IMG标签中打印出原始二进制文件.
如何将其再次编译为可读图像?另外,将数据存储在数据库中是愚蠢的吗?我应该只做我通常做的事情并将它们存储在服务器上吗?
谢谢
-麦克风
解决方法:
如果您愿意,可以将图像存储在数据库中(尽管将它们存储为文件也没有任何问题,选择适合您情况的任何内容),但是将原始二进制数据存储在BLOB中(即不要对其进行编码) BASE64).您可以直接在查询中嵌入从file_get_contents获取的二进制数据,前提是您首先使用正确的转义函数(在您的情况下为mysql_real_escape_string).
至于图像的输出,您可以按照现在的方式进行,但是您必须输出base64编码并使用如下数据URI方案:
echo '';
注意,嵌入图像数据有一些优点和缺点.需要注意的一些重要缺点是base64编码的严重开销(比原始编码大约33%)和潜在的缓存问题.
标签:php,mysql,blob,binary
来源: https://codeday.me/bug/20190726/1539646.html