为什么我的php中的mysql查询不会返回多行?

时间:2013-08-03 21:19:43

标签: php mysql sql json

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

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

5 个答案:

答案 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;
        }

}

干杯