2011-06-13 65 views
0

我試圖將一系列圖像疊加在一起,並將結果保存到一個blob字段中的mysql數據庫。我使用codeigniter的'主動記錄'語法來做到這一點。我遇到了以下錯誤:如何在PHP數據庫中存儲由PHP imagecopymerge函數創建的圖像

Error Number: 1064</p><p>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #48 WHERE `id` = '5'' at line 1 
UPDATE `users_thumbnails` SET `thumbnail` = Resource id #48 WHERE `id` = '5'  

有人可以解釋我做錯了什麼嗎?謝謝!

$base = imagecreatefromjpeg('application/assets/images/vel1_bg.jpg'); 
    foreach($array as $key => $value){ 
       $item = imagecreatefrompng('application/assets/images/items/item' . $value[0] . '.png'); 
       list($width, $height, $type, $attr) = getimagesize('application/assets/images/items/item'. $value[0] . '.png'); 
       imagecopymerge($base, 
          $item, 
          $value[1], 
          $value[2], 
          0, 
          0, 
          $width, 
          $height, 
          100); 
       //imagedestroy($item); 
      } 

    $data = array('thumbnail' => $base); 
    $this->db->where('fbid', $this->session->userdata('id')); 
    $this->db->update('users_thumbnails', $data); 
+0

你應該使用imagejpg或其他東西來生成圖像,否則$ base是一個GD資源,它實際上是一個指針,而不是圖像的內容 – venimus 2011-06-13 16:47:47

+0

你能添加正在執行的完整SQL語句? ID#48看起來有嫌疑。 – Colin 2011-06-13 16:48:17

+0

@Colin,我使用Codeigniter的活動記錄方法生成數據庫相關的SQL,對MySQL執行的完整SQL語句是您在錯誤消息 – 2011-06-13 16:53:00

回答

3

使用

... 
ob_start(); 
imagepng($base); 
$baseimg = ob_get_clean(); 
$data = array('thumbnail' => $baseimg); 
    ... 

別的$基地,當你把它傳遞給它簡單地轉換爲Resource id #48

編輯查詢不會自動轉換爲圖像:拍攝內容

+0

中看到的imagejpeg()的問題是它返回一個布爾值並且將圖像導出到瀏覽器。 – 2011-06-13 16:55:21

+0

是的,抱歉應該使用ob_ * – venimus 2011-06-13 16:57:56