В PHP, как я могу вернуть несколько значений столбцов из MySQL в формате JSON? - PullRequest
0 голосов
/ 25 февраля 2011

Я пытаюсь вернуть список всех курсов, в которых зарегистрирован пользователь (курс 1, курс 2 и т. Д.). В настоящее время у меня есть следующий код:

$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 ]

2 голосов
/ 25 февраля 2011

Кажется, что ваша база данных имеет неправильный дизайн.

Эти курсы должны храниться в отдельной таблице, а не в таблице пользователей.
И тогда это может быть легко восстановлено.

Чтобы ответить более определенно, требуется больше данных о структуре вашей базы данных.

0 голосов
/ 25 февраля 2011

Если вы хотите перечислить только курсы, вам не нужны все эти строки.

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

    );
}

этого будет достаточно

while ($row=$result->fetch_assoc()) {
    $json[]= $row['course1'] ;
}
0 голосов
/ 25 февраля 2011

Попробуйте выполнить это:

$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();

Предполагая, что у вас есть таблица пользователей с полями с именами 'course1', 'course2', 'course3' и т. Д. И 'username'.Вы можете выполнить * или просто перечислить обязательные поля (через запятую) после ключевого слова SELECT в SQL-запросе.Например, у вас есть один пользователь с именем 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 () этот массив.Надеюсь, что это поможет.

0 голосов
/ 25 февраля 2011

Что делать, если вы делаете что-то подобное:

<?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'];
    }
}
...
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...