2011-02-18 23 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.'")'; 
相關問題