将数据从控制器传递到模型

时间:2013-01-06 14:34:35

标签: php mysql codeigniter

我无法使用Codeigniter将数据从我的控制器传递到我的模型。我在浏览器控制台上遇到了内部服务器错误,但已将其缩小到上述问题。

这是我的代码:

控制器

public function get_results() {
        $numOfDraws = $this->input->post('numOfDraws');
        $data = $this->lotto_model->get_results($numOfDraws);
        echo json_encode($data);
    }

模型

  public function get_results($numOfDraws)
        {
            $query = $this->db->query('SELECT * FROM lotto ORDER BY id DESC LIMIT "$numOfDraws"');
            return $query->result();
        }

如果我对LIMIT进行硬编码,则查询成功运行。我知道$numOfDraws等于控制器中的正确值。

任何人都可以提供建议吗?

3 个答案:

答案 0 :(得分:4)

首先,对字符串的变量注入仅适用于双引号,而不是单引号。其次,您当前的代码对SQL注入是开放的。

CodeIgniter提供了防止这种情况的功能:

$query = $this->db->query('SELECT * FROM lotto ORDER BY id DESC LIMIT ?', array($numOfDraws));

答案 1 :(得分:3)

您的查询是单引号,因此它不会解析变量,您生成的SQL实际上是:

SELECT * FROM lotto ORDER BY id DESC LIMIT "$numOfDraws"

如果您想要更清晰的语法,抽象和更好的安全性,请使用CI的“ActiveRecord”类:

public function get_results($numOfDraws)
{
    return $this->db
        ->limit($numOfDraws)
        ->order_by('id', 'DESC')
        ->get('lotto')
        ->result();
}

或者解决原始查询的一种方法:

$query = $this->db
    ->query('SELECT * FROM lotto ORDER BY id DESC LIMIT '.(int) $numOfDraws);

答案 2 :(得分:1)

试试这个 -

        $query = $this->db->query("SELECT * FROM lotto ORDER BY id DESC LIMIT $numOfDraws");
        return $query->result();