从Blob插入和检索图像

时间:2014-05-14 22:26:50

标签: php mysql image blob

我在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,但这不是现在的选择。 我错过了什么?或做错了?

2 个答案:

答案 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;查询,因为这会显着降低性能。如果您要在数据库中存储更多更大的数据块,请考虑将数据移动到磁盘。