所以事情是这样的:
我正在开发一个后端(php),它与微软SQL Server连接,并使用android应用程序作为用户界面。
然而,当涉及到用php编码json时,我面临着一个问题。
可以公平地说,我是php的初学者。
这是我的代码:
$result = sqlsrv_query( $conn, 'select * from table1');
$row = sqlsrv_fetch_array($result);
$array = array();
while($row =sqlsrv_fetch_array($result))
{
$array[]=$row;
}
echo json_encode(array("data"=>array_values($array)));
因此,到目前为止,该表实际上什么都没有:只有两个属性:姓名和年龄
这里的问题是回报如下:
{"data":[{"0":"Miriana","name":"Miriana","1":null,"age":null},{"0":"Luke","name":"Luke","1":null,"age":null},{"0":"Sara","name":"Sara","1":null,"age":null},{"0":"Fuss","name":"Fuss","1":20,"age":20}]}
值前面总是有一个数字,然后是实数键和值。
例如:
"0":"Miriana"
"1":null
非常感谢任何愿意查看此信息的人。
**我检查了这些链接:用PHP解码json不工作用PHP解析JSON用PHP编码JSON与数组的问题**
您需要指定提取类型:
while($row =sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
默认情况下,您同时获得数字键和关联键。
您可能应该在循环之前删除fetch,因为您不会得到当前结果中的第一行。
sqlsrv_fetch_array
的默认获取类型是SQLSRV_FETCH_BOTH
,它以关联数组和数字数组的形式获取行,因此您可以同时获得这两种类型。如果只需要关联数组,请将sqlsrv_fetch_array
的第二个参数设置为SQLSRV_FETCH_ASSOC
。
$result = sqlsrv_query( $conn, 'select * from table1');
$array = array();
while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
{
$array[]=$row;
}
echo json_encode(array("data"=>array_values($array)));
删除了第一个获取,因为如果这样做,将不会获得第一行。
参考:http://php.net/manual/en/function.sqlsrv-fetch-array.php