#php #mysql #sql #json
#php #mysql #sql #json
Вопрос:
Я играю с идеей гостевой книги / чата и настраиваю таблицу MySQL с тремя столбцами:
1 — id — автоматическое увеличение первичного ключа
2 — name — Строка
3 — строка комментария
У меня очень мало опыта работы с PHP, но это то, что я собрал для этой операции:
$result = mysql_query("SELECT * FROM guestbook");
$i = 0;
while($row = mysql_fetch_array($result))
{
//add the row to the $chat array at specific index of $i
$chat[$i] = $row;
$i = 1;
}
$encode = json_encode($chat);
echo "$encode";
Однако вывод из этого выглядит довольно ужасно:
[{"0":"1","id":"1","1":"Justin ","name":"Justin ","2":"Comment 1","comment":"Comment 1"},
{"0":"2","id":"2","1":"Justin ","name":"Justin ","2":"Another comment","comment":"Another comment"},
{"0":"3","id":"3","1":"Justin ","name":"Justin ","2":"Look at this comment!","comment":"Look at this comment!"},
{"0":"4","id":"4","1":"Justin ","name":"Justin ","2":"Ok I'm done talking","comment":"Ok I'm done talking"}]
Я надеялся получить три поля: id, name и comment, но, похоже, все удвоилось. Кто-нибудь может помочь?
Спасибо!
Ответ №1:
Перефразируя Marc, просто замените эту строку:
while($row = mysql_fetch_array($result))
С помощью этого:
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
Чтобы получить более чистый JSON. По умолчанию mysql_fetch_array()
возвращается как целочисленный индекс, так и ассоциативный индекс, вам нужен только ассоциативный индекс.
Ответ №2:
mysql_fetch_array возвращает составной массив: индексированный И с ключом. Чтобы получить только один или другой, используйте mysql_fetch_row()
(только индексированный), mysql_fetch_assoc()
(только с ключом) или используйте дополнительный аргумент в fetch_array, чтобы указать, какой вы хотите: mysql_fetch_array($result, MYSQL_BOTH);
Комментарии:
1. так что правильным ответом было бы просто json_encode($result); , потому что я попробовал это, и он просто повторил «null».
2. Нет, правильным ответом было бы использовать mysql_fetch_assoc() в вашем цикле while(), затем json_encode $chat как обычно. Это приведет к созданию ТОЛЬКО именованных пар id / name / comment ключ: значение в данных JSON.
3. Я не понимаю, можете ли вы скопировать / вставить мой код и вставить синтаксис, который вы описываете? Меня беспокоит, что помещается в круглые скобки в mysql_fetch_assoc(), и должен ли я все еще добавлять в $chat[$i] .