2012-12-15 59 views
0

我有MySQL 5.1.65在共享主機帳戶,我插入圖像插入到我的圖像表(InnoDB)有MEDIUMBLOB列,我想存儲圖像數據時遇到麻煩。MySQL MEDIUMBLOB總是有相同的大小

CREATE TABLE IF NOT EXISTS `images` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `description` varchar(160) DEFAULT NULL, 
    `image` mediumblob, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我使用PDO從PHP 5.2.17連接到數據庫。我嘗試在我的連接中設置 PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ,因爲它在SO和網絡上的一些類似(或相同)問題的答案中被建議,但它沒有解決問題。 我也在MySQL配置中檢查了最大允許數據包,它被設置爲16,777,216,這應該足夠了,因爲我不允許上傳大於5MB的圖像。

我不知道它是否相關,但我在事務中插入數據,在該事務中,我也向其他表中插入了多個數據。

 $image_params = array(
      "description" => $data->description, 
      "image" => $image->getBinary() // Basicaly does file_get_contents() and returns 
     ); 
     $image_statement = $pdo->prepare(
       "INSERT INTO images (description, image) 
       VALUES(:description, :image)" 
     ); 

     $pdo->beginTransaction(); 

     $image_statement->execute($image_params); 
     $some_other_statement->execute($params); 

     $pdo->commit() 

在phpMyAdmin當我瀏覽圖片表格,圖像欄始終顯示[BLOB - 15B],當我訪問它,我得到一個包含.bin文件 「資源ID#[ID]」,其中[ID]是的ID一個圖像。

謝謝你,維克多

回答

2

我找到了解決我的問題! $image->getBinary()方法返回GD圖像資源,而不是實際的二進制圖像串,所以我把它改爲:

public function getBinary() { 
     ob_start(); 
     imagejpeg($this->image); 
     return ob_get_clean(); 
    } 

和它的作品吧! 經驗教訓,我可以繼續工作在我的項目! :)

相關問題