【问题标题】:Call to a member function result_array() on a non-object在非对象上调用成员函数 result_array()
【发布时间】:2015-02-06 06:42:52
【问题描述】:

请帮忙,我不知道怎么了,这是我的模型

    public function searchstudents(){
    $establishment_name = $this->input->post('name');
    $address = $this->input->post('address');
    $establishment_name2 = "Nicole's Apartment";


        $query = $this->db->query("SELECT u.id as id, u.first_name as firstname, u.middle_name as                  middlename, u.last_name as lastname, e.name as establishmentname FROM users u, beds b, room r, establishment e WHERE  r.establishment_id = e.id AND u.id = b.student_id  AND b.room_id = r.room_id AND e.name = '$establishment_name2' ");

  $this->db->query($query);

    return $query->result_array(); 

}

当我删除 AND e.name = '$establishment_name2' 时,它可以工作,但是当我包含它时,它会导致调用非对象上的成员函数 result_array()。我在mysql中尝试了查询,它可以工作,但在codeigniter中不起作用。

【问题讨论】:

  • 您可以通过将 $query 打印到您的页面来检查查询以及发送到您的数据库的内容:-) 如果问题仍然没有意义。您可以将打印的查询复制/粘贴到您的实际数据库管理系统的 SQL 部分,以便在那里测试运行它。您还可以通过将 sql 字符串粘贴到您喜欢的代码编辑器中来捕获一些格式错误。如果有语法突出显示,您将看到此查询的问题,即单引号之间的撇号处颜色发生变化。

标签: mysql codeigniter


【解决方案1】:

Noooo,看你可以直接这样做

$this->db->query('SELECT u.id as id, u.first_name as firstname, u.middle_name as                  middlename, u.last_name as lastname, e.name as establishmentname FROM users u, beds b, room r, establishment e WHERE  r.establishment_id = e.id AND u.id = b.student_id  AND b.room_id = r.room_id AND e.name = ?', array($establishment_name2));

$this->db->query() 接受 3 个参数:

1 - Query
2 - Array (with parameters, all parameters are clean)
3 - Escape string.

【讨论】:

  • 看看这个(更有条理)$this->db->select(' u.id as id, u.first_name as firstname, u.middle_name as middlename, u.last_name as lastname, e.name as establishmentname '); $this->db->from('users u, beds b, room r, establishment e'); $this->db->where('r.establishment_id', 'e.id'); $this->db->where('u.id', 'b.student_id'); $this->db->where('b.room_id', 'r.room_id'); $this->db->where('e.name', $establishment_name2);
【解决方案2】:

这是一个刻度问题:

$establishment_name2 = "Nicole's Apartment";

变成:

e.name = 'Nicole's Apartment' 

在您的查询中

使用 addlashes() 或像 Mudshark 所说的那样逃跑

【讨论】:

    【解决方案3】:

    你需要转义$establishment_name2:

    $query = $this->db->query("SELECT u.id as id, u.first_name as firstname, u.middle_name as                  middlename, u.last_name as lastname, e.name as establishmentname FROM users u, beds b, room r, establishment e WHERE  r.establishment_id = e.id AND u.id = b.student_id  AND b.room_id = r.room_id AND e.name = ".$this->db->escape($establishment_name2));
    

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2017-07-05
      • 2015-11-14
      • 2017-10-22
      • 1970-01-01
      • 2017-02-16
      • 2010-09-26
      • 2012-04-20
      • 2015-05-01
      相关资源
      最近更新 更多