2012-04-18 14 views
0

我在嘗試更新使用mysql和php命令的行中的兩個BLOB字段時出現問題。mysql更新2 blob一次不起作用

將BLOB插入行似乎沒有問題,這是我所做的。

$logotemp = $_FILES['eventlogo']['tmp_name']; 
$thumbnailtemp = $_FILES['eventthumbnail']['tmp_name']; 
$openlogo  = fopen($logotemp, 'r'); 
$openthumbnail  = fopen($thumbnailtemp, 'r'); 
$logo = fread($openlogo, filesize($logotemp)); 
$logo = addslashes($logo); 
$thumbnail = fread($openthumbnail, filesize($thumbnailtemp)); 
$thumbnail = addslashes($thumbnail); 
fclose($openlogo); 
fclose($openthumbnail); 

所以我有兩個表單文件輸入,並且這些文件被讀取,然後設置爲變量$ log和$ thumbnail。然後,我使用以下命令將其輸入到數據庫中:

$qry = "INSERT INTO $table (`Event Logo`, `Venue Logo`) VALUES ('$logo', '$thumbnail')"; 
$result = mysql_query($qry); 
if(!$result) { 
die(mysql_error()); 
} 

上述工作正常,儘管我已修剪掉其餘字段也會被填充。查詢工作,我可以將圖像返回到一個頁面,然後顯示它們以及來自該行的所有其他信息。

然後我想編輯這個行,所以創建了一個名爲edit.php的新php文件,它是上面使用的php文件的副本,名爲new.php。

這意味着表單是相同的,並且當頁面顯示時,每個輸入的值預先填充了來自數據庫的信息,徽標和縮略圖顯示在上傳字段旁邊。

如果我然後運行一個查詢來更新行,使用幾乎相同的代碼,它總是輸入一個空值到兩個斑點,本質上刪除上傳的圖像。這是發生了什麼:

$id = $_POST['eventid'];   
    $logotemp = $_FILES['eventlogo']['tmp_name']; 
    $openlogo  = fopen($logotemp, 'r'); 
    $logo = fread($openlogo, filesize($logotemp)); 
    $thumbnailtemp = $_FILES['eventthumbnail']['tmp_name']; 
    $openthumbnail  = fopen($thumbnailtemp, 'r'); 
    $thumbnail = fread($openthumbnail, filesize($thumbnailtemp)); 
    fclose($openlogo); 
    fclose($openthumbnail); 

所以再次,表單字段仍稱eventlogo和eventthumbnail和變量仍然是$標誌和$縮略圖。然後我用下面的查詢來更新該行:

$qry = "UPDATE $table SET `Event Name` = '$name', `Date` = '$date', `Time` = '$time', `Venue` = '$venue', `Price` = '$price', `Open To` = '$opento', `Rep Name` = '$repname', `Rep Email` = '$repemail', `Address` = '$address', `Website` = '$website', `Phone` = '$phone', `Description` = '$description', `Event Logo` = '$logo', `Venue Logo` = '$thumbnail' WHERE `Event ID` = '$id'"; 

我已經離開在被本次更新的其他變量。

$result = mysql_query($qry); 
if(!$result) { 
die(mysql_error()); 
} 

當查詢運行時,它將更新任何其他領域我想,除了在最後兩個圖像的BLOB字段。考慮到我複製並粘貼了上傳字段的代碼,讀取該字段內容的代碼,然後手動輸入了一個查詢來更新這些字段,我看不出發生了什麼問題。

我錯過了一些明顯的東西嗎?任何幫助是極大的讚賞。

感謝,編

+0

1st。使用參數化的SQL,這是一件很麻煩的事情。其次,在edit.php中,至少缺少對logo的「addslashes」調用。二進制數據將包括混淆了你的sql查詢的字符,但是mysql(和其他sql服務器)會默默接受這些字符。 – 2012-04-18 15:38:48

+0

對不起,我的代碼確實包含了addslashes,但由於某些原因,沒有在這裏包含它們。在打開文件並將其作爲二進制文件讀取時,它一定是錯誤的,只是空着 – Eds 2012-04-18 16:00:22

回答

0

不能找到我這個排序的代碼,但我想我最終只更新一次一個。