2011-02-18 83 views
0

我试图将上传的图像存储在数据库中。但是,图像不会显示,当我在图像列中查看带有p​​hpmyadmin的表时,我会看到类似[BLOB - 20B]的东西,而不是实际的大小。上传的图像未正确存储在数据库中(php mysql)

显示脚本工作正常,因为我通过phpmyadmin而不是我的上传脚本插入图像,它显示正常。

我的形式:

<form id="productForm" action="index.php" method="post" enctype="multipart/form-data"> 
<input type="hidden" name="product_id" value="' . $values['product_id'] . '" /> 
<input type="file" name="image" /> 
</form> 

处理代码:

$clean['image'] = mysqli_real_escape_string($dbc, file_get_contents($_FILES['image']['tmp_name'])); 

mysqli_query($dbc, " 
    INSERT INTO product_images (product_id, mime, image) 
    VALUES ('{$clean['last_product_id']}', '{$clean['mime']}', '{$clean['image']}') 
"); 

我省略一切无关紧要导致其他东西似乎运作良好。

感谢

+0

`[BLOB-20B]`是phpMyAdmin的BLOB数据占位符。显示图像时有问题吗? – 2011-02-18 18:31:14

+0

嗯,我看到它的方式,它告诉我只有20个字节存储!这些图像不显示。我从phpmyadmin手动添加的说92KB或者什么东西,并显示正常。 – Booya 2011-02-18 19:13:26

+0

用一些代码更新了我的答案,以尝试... – 2011-02-18 19:44:30

回答

0

显然,它有一些东西需要与逃逸。我最终没有逃脱任何东西,直到我用sprintf()形成的实际查询

$clean['qText'] = sprintf(" 
    INSERT INTO product_images (product_id, mime, image) 
    VALUES ('%d', '%s', '%s')", 

    mysqli_real_escape_string($dbc, $clean['last_product_id']), 
    mysqli_real_escape_string($dbc, $clean['mime']), 
    mysqli_real_escape_string($dbc, file_get_contents($_FILES['image']['tmp_name'])) 
); 

mysqli_query($dbc, $clean['qText']); 
2

我道歉,这不是直接回答你的问题,但我会建议你的方法是不是最好的一个 - 给我建议,如果你能,你放弃的地步。

将图像数据存储在数据库中是可能的,但这是你可以做的事情之一,但不应该这样做。如果您的脚本甚至看到适度的使用,您的数据库可能会很快变得庞大而笨拙。特别是在索引较差或缺失的情况下,随着表大小随着每个添加的记录的增加,您可以预期数据库性能会下降。

除了数据库大小之外,维护代码的额外复杂性可以检索图像数据并以客户端可以使用的方式输出。你不能仅仅是print的数据,你必须发送标题来表明它是一个图像,这意味着一个单独的脚本,额外的http请求,以及额外的数据库调用。

四周,这是一个不好的方法来使用。您最好将文件写入磁盘,然后将该路径作为字符串存储在数据库中,我可以从代码角度更容易地添加该数据库。以后使用这些数据也是非常容易的。

祝你好运!

编辑

试试这个,纠正你当前的代码,顺便说一句:

$instr = fopen($_FILES['image']['tmp_name'],"rb"); 
    $image = addslashes(fread($instr,filesize($_FILES['image']['tmp_name']))); 
    mysqli_query($dbc, 'INSERT INTO product_images (product_id, mime, image) 
     VALUES ("'.$clean['last_product_id'].'", "'.$clean['mime'].'", "'.$image.'")';