我试图在PHP中以JSON格式返回用户的名字和姓氏列表。
我的PHP看起来像:
$_Query = '
SELECT
Fname,Lname
FROM
users
WHERE
number = "'.$_REQUEST['number'].'"
;';
$SQLResult = mysql_query($_Query) or die(mysql_error());
$_UserData = array();
if(mysql_num_rows($SQLResult) <> 0){
while($SQLRow = mysql_fetch_array($SQLResult)){
$_UserData['Fname'] = $SQLRow['Fname'];
$_UserData['Lname'] = $SQLRow['Lname'];
}
}
echo json_encode($_UserData);
我希望格式
中有多行{"Fname":["First_name1","First_name2"],"Lname":["Last_name1","Last_name2"]}
当然。但是,脚本返回具有正确条件的最后一行
{"Fname":"Steve","Lname":"LastName"}
MySQl服务器使用相同的查询返回它应该的内容。
+--------------+-------------+
| Fname | Lname |
+--------------+-------------+
| First_name1 | Last_name1 |
| First_name2 | Last_name2 |
+--------------+-------------+
为什么会发生这种情况,我该如何解决?谢谢!
答案 0 :(得分:2)
试试这个:
while($SQLRow = mysql_fetch_array($SQLResult)){
$_UserData[] = $SQLRow;
}
在您的示例中,您实际上是为每个新行覆盖$ _UserData数组,因此缺少行。
<强>更新强>: 这将使JSON字符串看起来更像您想要的那样。
while($SQLRow = mysql_fetch_assoc($SQLResult)){
$_UserData['Fname'][] = $SQLRow['Fname'];
$_UserData['Lname'][] = $SQLRow['Lname'];
}
答案 1 :(得分:1)
$_UserData['Fname'] = $SQLRow['Fname'];
$_UserData['Lname'] = $SQLRow['Lname'];
您反复设置_UserData的相同两个元素,而不是将新值附加到数组。
答案 2 :(得分:1)
您的循环会覆盖$ _UserData数组中的值。 您应该将每行追加到数组。
此外,请注意您应该逃避输入。
您的代码应如下所示:
$_Query = '
SELECT
Fname,Lname
FROM
users
WHERE
number = "'.(int)$_REQUEST['number'].'"
;';
$SQLResult = mysql_query($_Query) or die(mysql_error());
$_UserData = array();
if(mysql_num_rows($SQLResult) <> 0){
while($SQLRow = mysql_fetch_array($SQLResult)){
$_UserData[] = $SQLRow;
}
}
echo json_encode($_UserData);
答案 3 :(得分:0)
试试这个:
$ _ UserData = array();
if(mysql_num_rows($SQLResult) <> 0){
$i = 0;
while($SQLRow = mysql_fetch_array($SQLResult)){
$_UserData[$i]['Fname'] = $SQLRow['Fname'];
$_UserData[$i]['Lname'] = $SQLRow['Lname'];
$i++;
}
答案 4 :(得分:0)
当你意识到你只分配了$ _UserData数组的1个元素时,我确定你会踢自己。
应该是这样的:
$_UserData = array();
if(mysql_num_rows($SQLResult) <> 0){
while($SQLRow = mysql_fetch_array($SQLResult)){
// Either...
// Create a new entry in $_UserData with same structure and contents as $SQLRow
$_UserData[] = $SQLRow;
// OR more specific - say if the structures aren't identical
// $DataRow=array();
// $DataRow['Fname'] = $SQLRow['Fname'];
// $DataRow['Lname'] = $SQLRow['Lname'];
// $_UserData[] = $DataRow;
}
}
干杯