2016-07-23 98 views
0

这是我现在的代码,它返回哈桑姆哈罗德配置文件为JSON,这是完美的。我需要做的是将我的参数传递到查询字符串中,而不是传入名称,以便在URL传递名称时查询从数据库中返回该人员的配置文件。当我改名字Hassum哈罗德变量$名字,我得到以下错误:CodeIgniter - 返回参数行

未知列在 'where子句' SELECT名字,SHORT_NAME,名望,生物与个人资料,其中name = Hassum%20Harrod

'Hassum'

这是我的代码现在:

控制器

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

回答

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; 
0

您正在使用LIKE关键字查询,所以我们可以假设会有从数据库返回的结果不止一个。在这种情况下,您需要改为$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; 
} 

再次,如果你期望只有一个可能的行数据库,你可以试试这个代码。但是,如果你不能确定是否会有几种可能行,你必须使用的代码程序来检索是:

$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因为数组很容易转化TI JSON返回result_array()或row_array(),虽然有suitable solutions 。 毕竟,在方法开始加载的模型根本不使用。

Docs

+0

我曾尝试DOC例子如上图所示,但后来我得到的错误:未知列“巴罗特”在“where子句” SELECT名字,SHORT_NAME,名望,生物与个人资料,其中name =巴罗特%20Bellingham – Jacqueline

+0

看来你首先需要'urldecode()'函数。在将变量传递给SQL语法之前,在'$ name'变量上使用它。像:'$ name = trim(urldecode($ name))'。 [文件](http://php.net/manual/en/function.urldecode.php)。尝试使用propper代码和编码标准。在SQL查询中对列名和表名使用反引号。 – Tpojka

+0

Tpojka你给我的片段完美地工作,谢谢你。这正是我需要的。 – Jacqueline