在PHP中,如何以JSON格式从MySQL返回多个列值?

时间:2011-02-25 06:12:00

标签: php mysql arrays json

我正在尝试返回用户注册的所有课程的列表(course1,course2等)。目前,我有以下代码:

$mysqli = new mysqli("localhost","username","password","sampleTest");
if (mysqli_connect_errno()) {
    printf("Can't connect to SQL Server. Error Code %s\n", mysqli_connect_error($mysqli));
    exit;
}
// Set the default namespace to utf8
$mysqli->query("SET NAMES 'utf8'");
$json   = array();
if($result = $mysqli->query("select course1 from users where username ='test'")) {
    while ($row=$result->fetch_assoc()) {
        $json[]=array(
            'courses'=>$row['course1'],

        );
    }
}
$result->close();

header("Content-Type: text/json");
echo json_encode(array( 'courses'  =>   $json )); 

$mysqli->close(); 

我可以获得第一个课程但不能显示其他课程。我已经尝试了select * from users where username ='test',但我仍坚持沿阵列传递。

4 个答案:

答案 0 :(得分:2)

您的数据库似乎设计错误。

这些课程应存储在单独的表格中,而不是存储在用户表格中 然后它可以很容易地检索。

为了更加肯定地回答,需要更多数据库结构数据。

答案 1 :(得分:0)

如果您正在做类似的事情该怎么办:

<?php
...
$json = array();
$json['courses'] = array();
if($result = $mysqli->query("select course1 from users where username ='test'")) {
    while ($row=$result->fetch_assoc()) {
        $json['courses'][] = $row['course1'];
    }
}
...
?>

答案 2 :(得分:0)

如果您只想列出课程,则不需要所有这些行。

while ($row=$result->fetch_assoc()) {
    $json[]=array(
        'courses'=>$row['course1'],

    );
}

这就够了

while ($row=$result->fetch_assoc()) {
    $json[]= $row['course1'] ;
}

答案 3 :(得分:0)

尝试执行此操作:

$mysqli = new mysqli("localhost","username","password","sampleTest");
if (mysqli_connect_errno()) {
    printf("Can't connect to SQL Server. Error Code %s\n", mysqli_connect_error($mysqli));
    exit;
}
// Set the default namespace to utf8
$mysqli->query("SET NAMES 'utf8'");
$json   = array();
if($result = $mysqli->query("select * from users where username ='test'")) {
    while ($row=$result->fetch_assoc()) {
        $json[]=array(
            'courses'=> array(
                  'cource1' => $row['course1'],
                  'cource2' => $row['course2'],
                  'cource3' => $row['course3'],
            ),
        );
    }
}
$result->close();
header("Content-Type: text/json");
echo json_encode(array( 'courses'  =>   $json )); 
$mysqli->close();

假设您的users表中包含名为'course1','course2','course3'等字段和'username'字段。 您可以在sql查询中的SELECT关键字之后执行*或只列出必需的字段(以逗号分隔)。 例如,您有一个名为test的用户:

username course1 course2 course3
  test     Yes     Yes     No

你只会从表中收到一行。 你会得到

//var_dump($json);

array(1) {
  [0]=>
  array(1) {
    ["cources"]=>
    array(3) {
      ["cource1"]=>
      string(3) "Yes"
      ["cource2"]=>
      string(3) "Yes"
      ["cource3"]=>
      string(2) "No"
    }
  }
}

执行上述代码后。 然后你只需要json_encode()这个数组。 希望它会有所帮助。