Подтвердить что ты не робот

Преобразовать запрос codeigniter в json?

Я хочу преобразовать модельный запрос в json с помощью json_encode, он не работает. Но с обычным массивом.

 $arr = array("one", "two", "three");
       $data["json"] = json_encode($arr);

Выход

 <?php echo "var arr=".$json.";"; ?>
 var arr=["one","two","three"];

Но когда я пытаюсь преобразовать запрос, codeigniter выдает ошибку. Что это с этим? Это сообщение об ошибке:

Возникла ошибка PHP. Серьезность: Предупреждающее сообщение: [json] (php_json_encode) не поддерживается, закодировано как null

И преобразованный результат запроса = Я имею в виду метод модели:

{"conn_id":null,"result_id":null,"result_array":[],"result_object":[],"current_row":0,"num_rows":9,"row_data":null} 

Я пытаюсь сделать так:

 $posts = $this->Posts_model->SelectAll();
       $data["posts"] = json_encode($posts); 

Кстати, модель и метод отлично работают, когда я делаю это без json_encode.

Что-то, что я делаю неправильно, но вопрос в том, что?

4b9b3361

Ответ 1

Кажется, вы пытаетесь закодировать объект результата базы данных CodeIgniter, а не массив результатов. Объект результата базы данных действует как обертка вокруг курсора в результирующий набор. Вы должны получить массив результатов из объекта результата и затем закодировать это.

Код вашей модели выглядит примерно так:

function SelectAll()
{
    $sql = 'SELECT * FROM posts';
    // Return the result object
    return $this->db->query($sql);
}

Это должно быть примерно так:

function SelectAll()
{
    $sql = 'SELECT * FROM posts';
    $query = $this->db->query($sql);
    // Fetch the result array from the result object and return it
    return $query->result();
}

Это вернет массив объектов, которые вы можете закодировать в JSON.

Причина, по которой вы получаете ошибку, пытающуюся закодировать объект результата, состоит в том, что она имеет переменную члена resource, которая не может быть закодирована в JSON. Эта переменная ресурса на самом деле является курсором в результирующий набор.

Ответ 2

public function lastActivity()
{
    header("Content-Type: application/json");
    $this->db->select('*');
    $this->db->from('table_name');
    $query = $this->db->get();

    return json_encode($query->result());
}

Ответ 3

В соответствии с последним стандартом CI используйте следующий код в файле вашего контроллера:

$this->output->set_content_type('application/json')->set_output(json_encode($arr));

Ответ 4

Вот рабочее решение:

            $json_data = $this->home_model->home_getall();
            $arr = array();
            foreach ($json_data as $results) {
            $arr[] = array(
                   'id' => $results->id,
                   'text' => $results->name
                    );
            }
         //save data mysql data in json encode format       
          $data['select2data'] = json_encode($arr);

Ответ 5

Модели (сообщение):

function SelectAll()
{
   $this->db->select('*');
   $this->db->from('post');
   $query = $this->db->get();
   return $query;
}

Контроллеры:

$data['post'] = $this->post->SelectAll()->result_array();
echo json_encode($data);

Результат:

{"post":[{"id":"5","name":"name_of_post"}]}