-1

我正在尝试在 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  |
+--------------+-------------+

为什么会发生这种情况,我应该如何解决它?谢谢!

4

5 回答 5

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'];
}
于 2013-08-03T21:24:13.033 回答
1
$_UserData['Fname'] = $SQLRow['Fname'];
$_UserData['Lname'] = $SQLRow['Lname'];

您重复设置 _UserData 的相同两个元素,而不是向数组附加新值。

于 2013-08-03T21:22:29.587 回答
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);
于 2013-08-03T21:23:41.790 回答
0

试试这个:

$_UserData = 数组();

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++;
        }
于 2013-08-03T21:26:00.793 回答
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;
        }

}

干杯

于 2013-08-03T21:31:03.360 回答