У меня есть следующая функция, которая не работает, и у меня труднее всего это выяснить. Мне 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 ; }
Он безопасен, прост в использовании, легко понимается и читается. Не слушайте людей, говорящих, что однострочный код – это что-то хорошее, потому что хороший код должен быть читаемым.