【问题标题】:Convert codeigniter query to json?将codeigniter查询转换为json?
【发布时间】:2011-01-25 15:15:35
【问题描述】:

我想使用 json_encode 将模型查询转换为 json,它不起作用。但是对于普通的数组,它可以。

 $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) 类型不受支持, 编码为空

而转换后的“查询”结果=我的意思是模型方法是这样的:

{"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 时,模型和方法工作得很好。

我可能做错了什么,但问题是什么?

【问题讨论】:

  • 你能贴出不起作用的代码吗?我不明白您为什么要将查询转换为 json。您不应该将结果数据转换为 json 吗?
  • 如果出现错误,您可能想与我们分享错误。 ;-)
  • 能否请您发布错误信息?
  • 我已经编辑了我的帖子,感谢输入!

标签: json codeigniter


【解决方案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 编码。这个资源变量实际上是游标进入结果集。

【讨论】:

  • 非常感谢。我对 codeigniter 有点陌生,还有很多东西要学习它的 API,但现在它更有趣了。
  • 没问题。很高兴帮助:-)
【解决方案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】:

      模型(帖子):

      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"}]}
      

      【讨论】:

        【解决方案5】:

        这是可行的解决方案:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-25
          • 1970-01-01
          • 1970-01-01
          • 2019-04-24
          • 2022-11-02
          • 2017-05-29
          • 2019-01-05
          • 2021-09-24
          相关资源
          最近更新 更多