我在嘗試更新使用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字段。考慮到我複製並粘貼了上傳字段的代碼,讀取該字段內容的代碼,然後手動輸入了一個查詢來更新這些字段,我看不出發生了什麼問題。
我錯過了一些明顯的東西嗎?任何幫助是極大的讚賞。
感謝,編
1st。使用參數化的SQL,這是一件很麻煩的事情。其次,在edit.php中,至少缺少對logo的「addslashes」調用。二進制數據將包括混淆了你的sql查詢的字符,但是mysql(和其他sql服務器)會默默接受這些字符。 – 2012-04-18 15:38:48
對不起,我的代碼確實包含了addslashes,但由於某些原因,沒有在這裏包含它們。在打開文件並將其作爲二進制文件讀取時,它一定是錯誤的,只是空着 – Eds 2012-04-18 16:00:22