2013-04-17 37 views
0

讓我們讀出的圖像文件到varialble圖片:爲什麼分解關聯數組以某種方式改變先前存儲的圖片?

$picture = addslashes(fread(fopen($image, "r"), filesize($image))); 

這$圖片你可以很容易插入到數據庫表中,沒有麻煩。

*for example*: INSERT INTO $banners(banner) VALUES($picture); 

出於某種原因,讓我們創建一個關聯數組$決賽:

$final["banner"] = $picture; 
$final["place"] = something... 

後來讓分解$最終並插入獲得的值到數據庫:

$fields = "";  $values = ""; 

    while (list($name, $value) = each($final)) 
    { 
     $fields .= "$name, "; 
     $values .= "'$value', "; 
    } 
    // Cut trailing commas 
    $values_fields = ereg_replace(", $", "", $values_fields); 
    $values = ereg_replace(", $", "", $values); 

    // Execute query 
    $query = "INSERT INTO banners($values_fields) VALUES($values)"; 
    $res = mysql_db_query($database, $query) or mysql_die();  

現在MySQL的警告「的東西錯誤「,當涉及到$數據庫插入連續$值與$圖片。爲什麼?

+1

什麼是確切的錯誤信息? –

回答

0

如果你在這裏發佈的代碼正是你正在嘗試運行的代碼,那麼請注意,你正在積累$fields變量的字段名稱,但從$values_fields變爲空的「剪切尾隨逗號」。將空的$values_fields放入查詢中可能是導致mysql錯誤的原因。

你爲什麼要做addslashes()?嘗試使用mysql_real_escape_string()代替。

還要確保您嘗試將圖像放入的數據庫列的類型是BLOB或LONGBLOB。

您可能會發現對這個問題的答案Binary Data in MySQL有關。

+0

當然不是$ fields。=「$ name,」; 應該是$ values_fields。=「$ name,」; – user2279628

+0

我在帖子中拼錯了$字段,但它被放置在腳本中,沒有錯誤,即$ values_fields – user2279628

1

首先,不要破壞你的數據。直接讀取,並保持變量清潔:

$picture = file_get_contents($image); 

接下來,插入準備數據:

$final["banner"] = mysqli_real_escape_string($picture); 
$final["place"] = $something; 

最後,沒有通過您的陣列無需環路,因爲它只包含一個記錄。您不引用值,導致錯誤。

$fields = "`" . implode("`, `", array_keys($final)) . "`"; 
$values = "'" . implode("', '", array_values($final)) . "'"; 

$query = "INSERT INTO banners ({$fields}) VALUES ({$values})"; 
$result = mysqli_query($database, $query) or die(mysqli_error($database)); 

我在這裏使用MySQLi,因爲mysql_ *函數已被棄用(以及ereg_ *函數)。

+0

沒有必要遍歷數組,因爲它只包含一條記錄... – user2279628

+0

---我必須解釋數組將包含許多記錄,因爲它收集了不在此處顯示的不同信息。因此它是一個關聯數組。我可以通過命名詳細字段來解決問題,但最好的方法是將通用名稱用作$ values_fields和$ values。 (額外信息:我使用PHP4.3.9) – user2279628

+0

1.然後你將有一個包含許多'$ final'數組的數組。每一個都必須以同樣的方式來對待。 – nibra

相關問題