Проблема с кодировкой Json в PHP 5

#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