Написание SQL-запросов в Codeigniter 2.0

У меня есть следующая функция, которая не работает, и у меня труднее всего это выяснить. Мне 12 лет, и я просто учился, поэтому простите меня:

function get_answer() { $answer = $this->db->query("SELECT COUNT(questions) FROM possible_quest WHERE questions='something'"); return $answer; } 

Когда я запускаю следующий SQL-запрос в phpmyadmin, он возвращает ожидаемый результат

 SELECT COUNT(questions) FROM possible_quest WHERE questions='something' 

Как получить эту работу в CodeIgniter, используя мою функцию выше?

Ошибка PHP, которую я получаю

Возникла ошибка PHP
Уровень серьезности: 4096
Сообщение: объект класса CI_DB_mysql_result не может быть преобразован в строку

Может быть:

 function get_answer() { $query = $this->db->query("SELECT COUNT(questions) AS count FROM possible_quest WHERE questions='something'"); $count = $query->row(); // returns an object of the first row return $count->count; // OR $count = $query->row_array(); // returns an asociative array of the result return $count['count']; } 

Другое дело: если вы хотите передать «что-то» в качестве переменной, вы можете использовать параметризованный запрос, например

  $sql = "SELECT COUNT(questions) AS count FROM possible_quest WHERE questions = ?"; $query = $this->db->query($sql, array($something)); 

который имеет преимущество автоматического перехода на вашу переменную, поэтому вы не беспокоитесь о том, чтобы делать инъекции sql.

Вам нужно настроить счетчик.

Вот что вам нужно сделать:

 $answer = $this->db->query("SELECT COUNT(questions) as count FROM possible_quest WHERE questions='something'")->first_row()->count; //$answer is now setup to be count 

Одна линия. Thats красота CI

Вы получаете эту ошибку, потому что

 return $answer; 

должно быть

 return $answer->result(); 

Ошибка, которую вы получаете, связана с тем, что $this->db->query возвращает объект result, поэтому вы не можете использовать $answer непосредственно в виде строки.

Я предлагаю вам использовать print_r($answer) чтобы увидеть, что может быть неправильным при преобразовании объектов в строки, если у вас есть такая функция в вашей модели.

CodeIgniter имеет функции для построения запросов и возврата счетчика:

 function get_answer() { $this->db->from("possible_quest"); $this->db->where("questions", "something"); return $this->db->count_all_results(); } 

ПРИМЕЧАНИЕ. Имя функции get_answer не соответствует тому, что вы на самом деле делаете. Похоже, вы получаете количество вопросов, а не ответ, поэтому вы должны называть его чем-то, что имеет больше смысла, например «get_question_count».

Я рекомендую вам использовать активную запись с цепочкой методов, когда это возможно:

 public function getAnswer() { return $this->db-> select('id')-> where('questions', 'something')-> get('possible_quest')->row()->count ; } 

или

 public function getAnswer() { return $this->db-> select('id')-> from('possible_quest')-> where('questions', 'something')-> get()->row()->count ; } 

Он безопасен, прост в использовании, легко понимается и читается. Не слушайте людей, говорящих, что однострочный код – это что-то хорошее, потому что хороший код должен быть читаемым.