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

Php 将数据从控制器传递到模型,php,mysql,codeigniter,Php,Mysql,Codeigniter,我无法使用Codeigniter将数据从控制器传递到模型。我在浏览器控制台上遇到了一个内部服务器错误,但已将其缩小到上述问题 这是我的密码: 控制器 public function get_results() { $numOfDraws = $this->input->post('numOfDraws'); $data = $this->lotto_model->get_results($numOfDraws); echo

我无法使用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();
        }
如果我硬编码
限制
,查询将成功运行。我知道
$numOfDraws
等于控制器中的正确值

有人能提供建议吗

试试这个--

试试这个--


首先,变量注入字符串只能使用双引号,不能使用单引号。其次,您当前的代码对SQL注入开放

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

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

首先,变量注入字符串只能使用双引号,不能使用单引号。其次,您当前的代码对SQL注入开放

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

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

您的查询是单引号的,因此不会解析变量,您生成的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);

您的查询是单引号的,因此不会解析变量,您生成的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);

您是否尝试过在$numOfDraws周围不加引号?您是否尝试过在$numOfDraws周围不加引号?使用Active Record,您可以知道“规则/过滤器”的顺序对结果有什么影响吗。比如说,
$numoDraws
等于5,例如,上面的代码看起来是将表中的前5个条目排序,然后对它们进行排序,而不是先按ID排序,然后再对前5个条目排序。它只是一个查询生成器,只要最后调用
get()
,顺序就不重要了。使用活动记录,你能告诉我“规则/过滤器”的顺序对结果有什么影响吗。比如说,
$numoDraws
等于5,例如,上面的代码看起来像是将表中的前5个条目进行排序,而不是先按ID排序,然后再按前5个进行排序。它只是一个查询生成器,只要最后调用
get()
,顺序就不重要了。