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);
}
这可以吗?或者还有其他/更好的方法吗? 谢谢!
答案 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