2013-03-18 106 views
2

我正在爲使用phpMyAdmin上的MySql數據庫的音樂人設計一個社交網絡類型的網站。我在將圖像文件插入數據庫的網站上遇到問題,然後顯示它們(用於個人資料圖片)。圖像作爲LONGBLOB存儲在數據庫中。將圖像文件插入到MySQL數據庫

如果我直接通過phpMyAdmin添加圖片,它工作正常。它是根據數據庫以.bin格式存儲在LONGBLOB數據類型中的.jpg。在我的網站,我可以查詢和使用完全顯示出來:

<img src="data:image/jpeg;base64,<?php echo base64_encode($memberpicture);?>" 
ALT="Member does not have picture" WIDTH=100 HEIGHT=100></img> 

但是,如果一個網站的用戶創建一個配置文件,並使用該網站的「創建配置文件」功能,插入一張圖片爲資料圖片,它不顯示他們的個人資料。下面是選擇圖像代碼:

... 
<div class="control-group"> 
    <div class="controls"> 
     <label>Band Picture</label> 
     <input type="file" name="picture"/> 
    </div> 
</div> 
... 

這裏是插入代碼:

<?php 
    session_start(); 
    foreach($_POST AS $key => $val) { 
    $_SESSION[$key]=$val; 
} 

mysql_connect("***", "***", "***"); 
mysql_select_db("musicians"); 

//...declare other values(name, bio, etc... 
$cpicture=$_POST['picture']; 
$cpicture = stripslashes($cpicture); 
$cpicture = mysql_real_escape_string($cpicture); 

$profileInsert="INSERT INTO profile(PROFILE_BANDNAME,PROFILE_GENRE,PROFILE_BANDBIO, 
    PROFILE_PICTURE,PROFILE_ART,PROFILE_MUSICVIDEO,PROFILE_PLAYLIST) 
    VALUES ('$cbandname','$cgenre','$cbio','$cpicture','$cart','$cvideo','$cplaylist')" 
or die(mysql_error()); 

如果我看的數據庫中,有插入後有一個文件,但它是非常小的(約16個字節),並且無法在網站上或直接從數據庫中查看。它是根據數據庫以.bin形式存儲在LONGBLOB數據類型中的.bin,而不是以.bin形式存儲的.jpg。 任何幫助這個插入將非常感謝!

+0

爲什麼frodo爲什麼 - 請使用文件系統,或爲性能Mongodb + GridFS – user956584 2013-03-18 22:35:22

+0

你確定圖片正在服務器?你可以做一些像copy($ cpicture,「somepath」)的東西,並確保它在那裏,然後再開始嘗試發佈數據庫。也許只是在上傳後直接顯示它以確保? – 2013-03-18 22:39:15

回答

0

使用文件系統可能會更好,但如果你堅持這樣做你的方式是如何工作的,因爲你的代碼似乎沒有在窗體中,沒有方法或提交按鈕?

+0

是的,我意識到做文件系統可能會更好,但是這個項目將在4天內完成,因爲我參加了這個課程,我覺得只是讓LONGBLOB工作。我只發佈了代碼的相關部分,因爲每頁的整個腳本很長,因爲有很多事情要做。第一個片段的方法是「發佈」,第二個代碼片段來自它發佈到的頁面。 – user2177869 2013-03-18 22:51:48

+0

你的

元素上是否有enctype =「multipart/form-data」? – H2ONOCK 2013-03-18 22:54:56

+0

不,我只是,我應該將它改爲? – user2177869 2013-03-18 22:56:31

0

問題出在MySql Server Networking中。檢查max_allowed_pa​​cket的在配置:)

+0

我的數據庫中每個文件的最大允許文件大小爲2GB,那是什麼意思? – user2177869 2013-03-18 22:49:23

+0

最大允許packetlength從服務器發送 – curiosity 2013-03-18 22:53:25

+0

/收到我不知道如何找到這個數字,我使用的是HostGator的主持域和服務器是否有幫助... – user2177869 2013-03-18 22:57:01

0

不知道這是否有差別,但是當我搜索在谷歌爲你節省代碼看起來與所有的前幾個不同的結果:

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx http://mirificampress.com/permalink/saving_a_file_into_mysql http://bytes.com/topic/php/insights/740327-uploading-files-into-mysql-database-using-php

也許只是嘗試一個代碼交換。

我會在這裏迴應其他有關使用文件系統的評論/回答。但是,如果您只是想讓它在您的某些回覆中提到的那樣工作,只需複製另一個網站的一些工作代碼即可。