Php codeigniter最佳数据库查询方法&;注射预防
我不确定哪种方法是运行DB查询的最佳方法(或者有什么区别) 在:Php codeigniter最佳数据库查询方法&;注射预防,php,database,codeigniter,Php,Database,Codeigniter,我不确定哪种方法是运行DB查询的最佳方法(或者有什么区别) 在: $this->db ->select('*') ->from('table'); $this->db->get(); 及 我发现我需要get()类,因为我需要分页,而这是限制器所需要的……但也许另一个也允许分页 关于SQL注入的第二部分,这足够好吗?如果不是,是什么 $this->db ->select('*') ->from('table');
$this->db
->select('*')
->from('table');
$this->db->get();
及
我发现我需要get()类,因为我需要分页,而这是限制器所需要的……但也许另一个也允许分页
关于SQL注入的第二部分,这足够好吗?如果不是,是什么
$this->db
->select('*')
->from('table');
$this->db->get();
->where('id >'.$this->db->escape(1));
谢谢。所以大多数实现数据访问层和/或ORM的框架都使用预先准备好的语句。对于大多数简单的查询,如果您使用此接口,DAL/ORM将为您处理转义。例如:
$this->db->get_where('mytable', array('id' => $id), $limit, $offset);
$this->db
->select('*')
->from('table')
->where('id ', 1)->get();
使用此方法,它将数组(array(volumn\u value')
参数中的变量绑定到查询并对其执行转义
或者用你的例子:
$this->db->get_where('mytable', array('id' => $id), $limit, $offset);
$this->db
->select('*')
->from('table')
->where('id ', 1)->get();
查看他们应该帮助详细解释的文档:以下代码实现了CodeIgniter中的ActiveRecord库(尽管ActiveRecord通常指从数据库获取值的完全不同的方式) 在使用get()方法之前,ActiveRecord将在内部构建和存储SQL查询,然后在调用get()时,执行该查询并将其替换为结果对象,然后可以使用result()、result\u array()、row()或row\u array()访问该对象 下面的代码将直接从您提供的$SQL参数执行SQL查询
$this->db->query($sql);
从那时起,如果要从数据库中选择数据,可以执行以下操作:
$result = $this->db->result_array();
将该查询的结果放入数组
对于分页,您可以使用两种方式。例如,如果每页有10条记录,则这将获得第3页的记录:
$query = $this->db->select('*')->from('table')->limit(10, 30)->get();
if($query->num_rows())
{
return $query->result_array();
}
return FALSE;
而且,如果您使用任何$this->db methods()(where()),CodeIgniter将自动转义您输入的值:
$this->db->where('id', "'i am a nasty piece of SQL';DROP DATABASE 'my_db'");
那太好了-CodeIgniter会帮你处理的。只是要始终意识到,仅仅因为它是为您而做的,并不意味着没有其他方法可以暴露代码中的安全漏洞。在您的模型上使用原始数据库而不是ActiveRecord有什么原因吗?是的,我的无知:)请您详细说明,我是codeigniter的新手,到目前为止,我只是盲目地尝试教程所建议的,但我不使用CI,所以我错了。这是一个AR用法。这对我来说是骗人的,因为我习惯于教条和推动ORM的实现。请参阅下面我的答案,以获得简短的解释,但我相信实际使用CI的人会给出更明确、更有用的答案:-)