2013-05-04 86 views
1

Iam目前正在構建一個HTML5應用程序,該應用程序從php webservice獲取其數據json編碼。 我也有小圖像存儲在數據庫中,並希望將它們返回爲base64編碼的json結果。在php數組中使用base64編碼/替換blob

目前我得到的所有MySQL的字段,然後返回作爲JSON是這樣的:

$query = "SELECT * FROM `news` "; 

$posts = array(); 
if(mysql_num_rows($result)) { 
    while($post = mysql_fetch_assoc($result)) { 
    $posts[] = array('post'=>$post); 
    } 
} 

header('Content-Type: text/javascript'); 
echo json_encode(array('posts'=>$posts)); 

我有一個名爲圖片字段。 現在我想用base64轉換數組posts []中的圖片數據,我可以簡單地使用json返回所有數據,而不需要另一個http請求只爲圖片。

我的PHP技能不是很好,但我想大概是這樣的:

$posts['picture'] = base64_encode($posts['picture']); 

但我需要每一個畫面爲Base64轉換,所以也許它能夠更好地把它放在while循環:

while($post = mysql_fetch_assoc($result)) { 
    if($post == 'picture'){ 
     $post = base64_encode($post); 
    } 
    $posts[] = array('post'=>$post); 
    } 

可以工作嗎?或者還有其他更好的方法嗎? 謝謝!

回答

1

不是真的,第一,mysql_fetch_assoc將返回整行(所有列),這意味着$post將包含每一列的名稱,如:

$post['column_name_a'] 

$post['column_name_b'] 

$post['column_name_c'] 

.... 

所以,你只應該做的(這並不重要,如果它是空的):

$post['picture'] = base64_encode($post['picture']); 

然後,你可以把它添加到$帖子[]數組,然後json_encode(),它打印。

作爲一個附註,mysql_fetch_assoc已從PHP 5.5中棄用,將來會被刪除 - 請參閱http://php.net/manual/en/function.mysql-fetch-assoc.php

2

通常它不是存儲在數據庫中的圖片(或任何二進制數據)一個好主意。經典的方法是存儲圖片的位置。 如果您更喜歡將圖片存儲在您的數據庫中出於任何原因,您可以做類似您正在做的事情。

順便說一句,你可以直接擁有,當你在數據庫中插入它base64編碼的圖片,這將避免您要訪問其中的一個,每次重新轉換它。

1

謝謝! 你是對的...我應該考慮在未來改變我的代碼。

現在,只是一對夫婦,這是爲我工作的小圖片:

while($post = mysql_fetch_assoc($result)) { 
    $post['picture'] = base64_encode($post['picture']); 
    $posts[] = array('post'=>$post); 
    }