Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter最佳数据库查询方法&;注射预防_Php_Database_Codeigniter - Fatal编程技术网

Php codeigniter最佳数据库查询方法&;注射预防

Php codeigniter最佳数据库查询方法&;注射预防,php,database,codeigniter,Php,Database,Codeigniter,我不确定哪种方法是运行DB查询的最佳方法(或者有什么区别) 在: $this->db ->select('*') ->from('table'); $this->db->get(); 及 我发现我需要get()类,因为我需要分页,而这是限制器所需要的……但也许另一个也允许分页 关于SQL注入的第二部分,这足够好吗?如果不是,是什么 $this->db ->select('*') ->from('table');

我不确定哪种方法是运行DB查询的最佳方法(或者有什么区别) 在:

$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的人会给出更明确、更有用的答案:-)