CodeIgniter - 将参数作为行返回

时间:2016-07-23 11:33:25

标签: php json codeigniter

这是我现在的代码,它将Hassum Harrod配置文件作为JSON返回,这是完美的。我需要做的是将我的参数传递给查询字符串而不是名称,这样当url传递一个名字时,查询会从数据库中返回该人的个人资料。当我将名称Hassum Harrod更改为变量$ name时,我收到以下错误:

未知专栏' Hassum'在' where子句' SELECT name,short_name,reknown,bio FROM profile WHERE name = Hassum%20Harrod

这是我现在的代码:

控制器

public function getPerson($name) {
    // loads the DBModel.php                
    $this->load->model('DBModel');

    $query = $this->db->query("SELECT name, short_name, reknown, bio FROM profile WHERE name = 'Hassum Harrod'");

    $data['profile'] = $query->row();

    $this->load->view('profileView', $data);  

}

查看

echo json_encode($profile);

2 个答案:

答案 0 :(得分:1)

请阅读:http://www.codeigniter.com/user_guide/general/models.html

http://www.codeigniter.com/user_guide/database/query_builder.html

试试这种方式

将此方法添加到您的模型中应该是这样的

         // in your model
         public function getNames($name) {
            $data = array();
            $this->db->select(*);
            $this->db->like('name', $name);
            $query = $this->get('profile');
            if ($query->num_rows() > 0) {
                foreach ($query->result_array() as $row) {
                   $data[] = $row;
                }
            }

           return $data;
         }

你的控制器应该是这样的

  public function getPerson($name) {

      $this->load->model('DBModel');

      $data = $this->DBModel->getNames($name);

      // you can encode in json here
      $data['profile'] = json_encode($data);

      $this->load->view('profileView', $data);  
 }

http://www.codeigniter.com/user_guide/general/controllers.html

在视图中:

       echo $profile;

答案 1 :(得分:0)

您在查询中使用LIKE关键字,因此我们可以假设从DB返回的结果不止一个。在这种情况下,您需要$query->result()。其次,即使只有一个返回的行,这段代码:

$data['profile'] = $query->row() > 0;// assigning variable to condition (TRUE|FALSE)

将返回布尔值,但不返回结果本身。

这是简化代码,您可以查看:

<?php

$a = ['a', 'b', 'c'];

var_dump($b = $a > 0);// TRUE

随意开始使用文档中的基本示例。它可以帮助你维护代码:

$query = $this->db->query("YOUR QUERY");

$row = $query->row();

if (isset($row))
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

同样,如果您只期望来自DB的一行,则可以尝试使用此代码。但是,如果您不确定是否存在多个可能的行,则必须使用代码进行检索:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result() as $row)
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

当您将此设置为全部工作时,您可以将对象或数组转换为JSON字符串。

它将遵循语法:

$json = json_encode($row);

如果返回多行,则最容易从DB返回result_array()或row_array(),因为数组很容易转换为JSON,尽管有suitable solutions。 毕竟,根本不使用在方法开头加载的模型。

Docs