我在mysql blob字段中插入或从中检索图像时出错了。 我看了很多问题,已经在stackoverflow上讨论了这个问题,但是我的工作无法解决。
字段:
<input type="file" name="filename" id="filename" />
插入代码:
$img = chunk_split(base64_encode(file_get_contents(
$_FILES['filename']['tmp_name']
)));
$insrtSQL = "
INSERT INTO table (s_id, s_name, s_image, s_text, s_link, t_id)
VALUES ('a', 'a', '$img', 'a', 'a', 'a')
";
回显代码
<?php
echo '<img src="data:image/jpeg;base64,' .
base64_encode($row_Sss['s_image']) .
'" width="290" height="290">'
?>
我知道我应该使用MySQLi或PDO,但这不是现在的选择。 我错过了什么?或做错了?
答案 0 :(得分:1)
您的insert语句只是插入base64字符串,而不是base64编码的数据。尝试将其传递到MySQL FROM_BASE64 function:
$insrtSQL = "INSERT INTO table (s_id, s_name, s_image, s_text, s_link, t_id) VALUES ('a', 'a', FROM_BASE64('$img'), 'a', 'a', 'a')";
这使得MySQL引擎将base64字符串解码为二进制数据以进行存储。
答案 1 :(得分:1)
等等......你是BASE64编码你的数据 - 两次吗?
首先在上传的文件中执行 base64_encode(),然后您稍后从表中选择它并使用 base64_encode再次 echo() ()的。在执行echo时尝试删除base64_encode,并在将数据插入表时尝试省略chunk_split()命令。
此外,如果您希望将二进制数据存储到mySQL blob字段中,则不必对任何数据进行base64编码,只需执行以下操作:
$img = mysql_real_escape_string(file_get_contents($_FILES['filename']['tmp_name']));
然后你可以用HTML中的base64_encode()回显它。
请记住,由于您在表格中存储了大量数据,因此请避免使用&#34; SELECT * &#34;查询,因为这会显着降低性能。如果您要在数据库中存储更多更大的数据块,请考虑将数据移动到磁盘。