在Codeigniter 2.0中编写SQL查询

时间:2011-12-01 16:29:11

标签: php sql codeigniter

我有以下功能不起作用,我正在努力解决这个问题。我12岁,刚刚学习,原谅我:

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

return $answer;
}

当我在phpmyadmin中运行以下SQL查询时,它会返回预期的结果

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

如何使用上面的函数在CodeIgniter中使用它?

我得到的PHP错误是

  

遇到PHP错误   严重程度:4096
  消息:类CI_DB_mysql_result的对象无法转换为字符串

6 个答案:

答案 0 :(得分:4)

可能是:

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 :(得分:1)

您需要设置计数。

你需要做的是

$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的美丽

答案 2 :(得分:0)

您获得的错误与$this->db->query返回结果对象的事实有关,因此您不能将$answer直接用作字符串。

如果您在模型中有这样的功能,我建议您使用print_r($answer)来查看将对象转换为字符串可能出现的问题。

答案 3 :(得分:0)

您收到该错误是因为

return $answer;

应该是

return $answer->result();

答案 4 :(得分:0)

我建议您尽可能使用带有方法链接的Active Record:

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

它安全,易于使用,易于理解和阅读。不要听人们说单行代码是好的,因为好的代码应该是可读的。

答案 5 :(得分:0)

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'。

相关问题