Написание SQL-запросов в Codeigniter 2.0 - PullRequest
1 голос
/ 01 декабря 2011

У меня есть следующая функция, которая не работает, и я с трудом пытаюсь понять это. Мне 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 не может быть преобразован в строку

Ответы [ 6 ]

4 голосов
/ 01 декабря 2011

Может быть:

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-инъекциях.

1 голос
/ 01 декабря 2011

Вам необходимо настроить счетчик.

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

$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

Одна строка. Это красота CI

0 голосов
/ 01 декабря 2011

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.

0 голосов
/ 01 декабря 2011

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

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
    ;
}

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

0 голосов
/ 01 декабря 2011

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

return $answer;

должно быть

return $answer->result();
0 голосов
/ 01 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...