【问题标题】:CodeIgniter - return paramater as rowCodeIgniter - 将参数作为行返回
【发布时间】:2016-07-23 11:33:24
【问题描述】:

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

“where 子句”中的未知列“Hassum” 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);

【问题讨论】:

    标签: php json codeigniter


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      您在查询中使用了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;
      }
      

      同样,如果您希望 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.

      【讨论】:

      • 我已经尝试了如上所示的文档示例,但随后出现错误:“where 子句”中的未知列“Barot” SELECT name, short_name, reknown, bio FROM profile WHERE name = Barot%20Bellingham
      • 看来你首先需要urldecode()函数。在将变量传递给 SQL 语法之前,在 $name 变量上使用它。喜欢:$name = trim(urldecode($name))Docs。尝试使用适当的代码和编码标准。在 SQL 查询中对列名和表名使用反引号。
      • Tpojka,你给我的 sn-p 工作完美,谢谢。这正是我所需要的。
      • 如果有帮助,请随时accept(并投票)答案。 #SOreadytohelp
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      相关资源
      最近更新 更多