#php #json #fetch
#php #json #выборка
Вопрос:
Я пытаюсь использовать Json с моей базой данных, используя php5, но получаю странный результат. В этой базе данных есть четыре поля — ‘id’, ‘Title’, ‘Thread’, ‘date’, но результат jason выглядит следующим образом.
[
{
"0": "1",
"id": "1",
"1": "Title 1",
"Title": "Title 1",
"2": "Thread 1",
"Thread": "Thread 1",
"3": "2011-10-19",
"date": "2011-10-19"
},
{
"0": "2",
"id": "2",
"1": "Title 2",
"Title": "Title 2",
"2": "Thread 2",
"Thread": "Thread 2",
"3": "2011-10-03",
"date": "2011-10-03"
}
]
Вы можете видеть, что в результате дублируется информация. Откуда они??
Я приложу код, который я написал… Джейсон и мастера PHP, пожалуйста, просветите меня:'(..
Заранее благодарю вас.. Я попытаюсь решить ее снова, пока жду вашей помощи….
private static function queryAndFetch($tableName)
{
$query = "SELECT id, Title, Thread, date From $tableName";
$result = mysqli_query(self::$link, $query);
if(!($result))
{
echo "Error";
exit;
}
// $posts = mysqli_fetch_assoc(self::$result); - Working
self::$fetchedResult = array();
while($row = mysqli_fetch_array($result))
{
self::$fetchedResult[] = $row;
}
}
private static function encode()
{
//print_r(self::$fetchedResult);
//if($format == 'json') {
header('Content-type: application/json');
echo json_encode(self::$fetchedResult);
//}
//echo "hi".json_last_error();
}
}
Ответ №1:
mysqli_fetch_array
возвращает результирующие строки как с ассоциативными, так и с перечисляемыми ключами. Если вам нужны только ключи ассоциативного массива, тогда используйте mysqli_fetch_assoc
.
Комментарии:
1. Вау… Я был действительно глуп.. У меня даже был правильный код прямо там и прокомментировал его… Все это было из-за моего непонимания assoc и array. Спасибо за ваш быстрый ответ!!!!
2. Вы также можете указать, что вы хотите
mysqli_fetch_array()
вернуть. Вы можете использовать либоmysqli_fetch_array(MYSQLI_ASSOC)
илиmysql_fetch_array(MYSQLI_NUM)
слишком
Ответ №2:
Похоже, что ваш mysqli_fetch_array($result) возвращает ассоциативный массив, а не индексированный массив.
Попробуйте это изменение:
while($row = mysqli_fetch_array($result)) {
self::$fetchedResult[] = array(
'id' => $row->id,
'Title' => $row->Title,
'Thread' => $row->Thread,
'date' => $row->date
);
}
Если это не сработает, попробуйте использовать $row[‘id’], $row[‘Title’], $row[‘Thread’] и $row [‘date’] .
В качестве альтернативы, чтобы избежать необходимости выписывать каждое поле, измените его на mysqli_fetch_assoc($result).
Я подозреваю, что это проблема, с которой вы столкнулись?
Спасибо, myStream