我不确定哪个是运行数据库查询的最佳方法(或者这个问题的区别是什么) 之间:
$this->db
->select('*')
->from('table');
$this->db->get();
和
$this->db->query($sql);
我发现我需要get()类,因为我需要有分页,而限制器需要它......但也许另一个允许分页?
关于SQL注入的第二部分是否足够好?如果不是什么?
$this->db
->select('*')
->from('table');
$this->db->get();
->where('id >'.$this->db->escape(1));
谢谢。
答案 0 :(得分:1)
以下代码在CodeIgniter中实现ActiveRecord库(尽管ActiveRecord通常指的是从数据库中获取值的一种完全不同的方式)。
$this->db
->select('*')
->from('table');
$this->db->get();
直到get()方法,ActiveRecord将在内部构建并存储SQL查询,然后,当您调用get()时,执行该查询并将其替换为结果对象,然后您可以使用结果访问该结果对象( ),result_array(),row()或row_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方法()(where()),CodeIgniter将自动转义您放入其中的值:
$this->db->where('id', "'i am a nasty piece of SQL';DROP DATABASE 'my_db'");
那很好 - CodeIgniter会为你处理它。只要始终注意,仅仅因为它已经为您完成,并不意味着没有其他方法可以在您的代码中暴露安全漏洞。
答案 1 :(得分:0)
因此,实现数据访问层和/或ORM的大多数框架都使用预准备语句。对于大多数简单查询,如果使用此接口,DAL / ORM将为您处理转义。例如:
$this->db->get_where('mytable', array('id' => $id), $limit, $offset);
使用此方法,它会将数组中的变量(array('column_name' => volumn_value')
)参数绑定到查询中,并对它们执行转义。
或使用您的示例:
$this->db
->select('*')
->from('table')
->where('id ', 1)->get();
查看他们应该帮助详细解释的文档:http://codeigniter.com/user_guide/database/active_record.html