2014-12-08 2 views
0

помощь, пожалуйста, я не знаю, что это неправильно, это моя модельвызов функции члена result_array() на не-объект

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

} 

когда я удалить и e.name = «$ establishment_name2» его работает, но когда я включаю его, это приводит к вызову функции-члена result_array() для не-объекта. Я попробовал запрос в mysql, и он работает, но он не будет работать в кодеригенере.

+0

Вы можете проверить запрос и что в настоящее время отправлен на ваш db, распечатав $ query на вашей странице :-), если все еще не имеет смысла, в чем проблема. Вы можете скопировать/вставить напечатанный запрос в раздел SQL для вашей реальной системы управления базами данных, чтобы протестировать ее там. Вы также можете немного угадать ошибки форматирования, вставив строку sql в свой любимый редактор кода. Если есть подсветка синтаксиса, вы увидите проблему для этого запроса, где цвет меняется в апострофе между вашими одиночными кавычками. – tylerlindell

ответ

0

это вопрос клещ:

$establishment_name2 = "Nicole's Apartment"; 

становится:

e.name = 'Nicole's Apartment' 

в запросе

использование addslashes() или бежать, как грязь акула сказал

0

Вам нужно бежать $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)); 
0

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-> запрос() принимает 3 параметра:

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

Мужчина, посмотрите эту страницу https://ellislab.com/codeigniter/user-guide/database/queries.html –

+0

И посмотрите (более организованный) '$ this-> db-> select (' u.id как id, u.first_name как имя, u.middle_name как middlameame, u.last_name as lastname, e.name как имя учреждения '); $ this-> db-> from ('пользователи u, кровати b, комната r, учреждение e'); $ this-> db-> где ('r.establishment_id', 'e.id'); $ this-> db-> где ('u.id', 'b.student_id'); $ this-> db-> где ('b.room_id', 'r.room_id'); $ this-> db-> где ('e.name', $ creation_name2); ' –

Смежные вопросы