用php数组中的base64编码/替换blob

时间:2013-05-04 16:57:31

标签: php json html5 web-services blob

Iam目前正在构建一个HTML5应用程序,它从php webservice获取其数据json编码。 我还有一些小图像存储在数据库中,并希望将它们作为base64编码并返回json结果。

目前我获取所有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);
  }  

这可以吗?或者还有其他/更好的方法吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

通常,将图片(或任何二进制数据)存储在数据库中并不是一个好主意。经典的方法是存储图片的位置。 如果您希望出于任何原因将图片存储在数据库中,您可以执行类似于您正在执行的操作。

顺便说一下,当你将它插入数据库时​​,你可以直接用base64编码的图片,这样每次你想要访问其中一个时都会重新转换它。

答案 1 :(得分:1)

谢谢! 你是对的...我应该考虑将来改变我的代码。

现在只是为了几张小图片,这对我有用:

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

答案 2 :(得分:1)

不是,首先,mysql_fetch_assoc将返回整行(所有列),这意味着$post将包含每个列名,如:

$post['column_name_a']

$post['column_name_b']

$post['column_name_c']

....

所以,你应该这样做(如果它是空的并不重要):

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

然后,您可以将其添加到$ posts []数组,然后将其添加到json_encode()中进行打印。

作为旁注,mysql_fetch_assoc已从PHP 5.5弃用,将来会被删除 - 请参阅http://php.net/manual/en/function.mysql-fetch-assoc.php