Codeigniter this-> db-> query

Mic*_*sby 4 php codeigniter

$ this-db-> query()是否具有mysql注入保护?我想知道因为我在实例中使用它并且没有做任何事情来防止sql注入.

Ste*_*eve 5

使用CodeIgniter查询的ActiveRecord样式转义参数,但不转义query().

您可以这种方式使用活动记录:

$someAge = 25;
$this->db->select('names, age');
$query = $this->db->get_where('people', array('age' => '>' . $someAge));
Run Code Online (Sandbox Code Playgroud)

在此处阅读更多相关信息:http://ellislab.com/codeigniter/user-guide/database/active_record.html


xel*_*ber 5

不,db->query() 默认不受 SQL 注入保护,您几乎没有选择。使用查询绑定

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick'));
Run Code Online (Sandbox Code Playgroud)

对于更复杂的查询,您必须在继续时构建查询,请使用 compile_bind() 获取 SQL 块。

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$safe_sql  = $this->db->compile_bind($sql, array(3, 'live', 'Rick'));
Run Code Online (Sandbox Code Playgroud)

等等。

或者在参数上使用转义 $this->db->e​​scape()

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
Run Code Online (Sandbox Code Playgroud)

首先使用表单验证并包括 xss_clear、max_length 等任何一种方式与上述之一结合始终是最佳实践。