写在前面
我的需求是,微信小程序访问网址发布页的php,php登陆数据库获取数据。但问题是服务器返回的data是字符串类型,不想做字符串处理,所以想把返回的data搞成json格式。
PHP
代码是模仿菜鸟教程上的“PHP 数据库”PHP 数据库教程写的。网页截图如下:
根据我的项目,写了如下的php:
<?php
$servername = "127.0.0.1:3306";
$username = $_GET['name'];//参数由微信小程序传入
$password = $_GET['password'];
$database = $_GET['database'];
$openid = $_GET['openid'];
// 创建连接
$conn = new mysqli($servername, $username, $password,$database);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// sql语句
$sql = "SELECT * FROM list WHERE openid='".$openid."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {//$result->num_rows返回命中数目
// 输出数据
while($row = $result->fetch_assoc()) {
echo json_encode($row);
}
} else {
echo "0 ";
}
$conn->close();
?>
其实上述json_encode()就可以将数组转换为json格式输出。假设单次echo的输出是{…},那么服务器响应返回给客户端的data即为{…},是json格式;,但多次echo后,响应的data为{…}{…}{…},data就以字符串的形式即"{…}{…}{…}“传给了客户端,如下图。(图没截完整,但可以看出不是json格式,是”{…}{…}{…}"的字符串)
知道了问题所在,我的方案是:
1.先定义一个空数组:$row1=array();
2.每个循环内把 $row压入数组 $row1: array_push( $row1, $row[“code”]);
3.最后:echo json_encode( $row1);
改动的地方如下:
if ($result->num_rows > 0) {
$row1=array();
while($row = $result->fetch_assoc()) {
array_push($row1,$row);
}
echo json_encode($row1);
} else {
echo "0 ";
}
理论上data就是[{…},{…},{…}]的形式。然后看小程序控制台输出的结果:
嘿嘿,就舒服了。其实很简单,但对没有PHP基础的我,从知道json_encode()这个函数到解决问题将近花了一个下午。
附上下午搜到的一些链接:
php Array:http://www.runoob.com/php/func-array.html
MySQLi 官方手册:http://php.net/manual/zh/book.mysqli.php