1

我无法使用 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等于控制器中的正确值。

任何人都可以建议吗?

4

3 回答 3

4

First of all variable injection into a string only works with double quotes, not with single quotes. Secondly your current code is open to SQL injection.

CodeIgniter provides functionality to prevent this:

$query = $this->db->query('SELECT * FROM lotto ORDER BY id DESC LIMIT ?', array($numOfDraws));
于 2013-01-06T14:40:34.057 回答
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);
于 2013-01-06T14:44:33.510 回答
1

尝试这个 -

        $query = $this->db->query("SELECT * FROM lotto ORDER BY id DESC LIMIT $numOfDraws");
        return $query->result();
于 2013-01-06T14:38:02.970 回答