寫在前面
我的需求是,微信小程序訪問網址發佈頁的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