3 回答
TA贡献1810条经验 获得超4个赞
CodeIgniter确实可以避免使用该$this->db->query方法时传递的变量。但是仅当您将变量作为绑定传递时,这是一个示例:
$dbResult = $this->db->query("SELECT * FROM users WHERE username = ?", array($this->input->post('username')));
还请记住,这$_POST不是首选,$this->input->post因为它所做的是检查变量是否存在以防止错误。
TA贡献2003条经验 获得超2个赞
CodeIgniter在其数据库层中提供了一些字符串转义功能。
摘录自CI手册:
在将数据提交到数据库之前,先对其进行转义是非常好的安全措施。CodeIgniter有三种方法可以帮助您执行此操作:
$ this-> db-> escape()此函数确定数据类型,使其只能转义字符串数据。它还会自动在数据周围添加单引号,因此您不必:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
我将发布另外两个示例,但是我不想从阅读手册中获得所有乐趣。
TA贡献1884条经验 获得超4个赞
不,您发布的代码容易受到SQL注入的影响。您需要使用查询绑定来构造SQL查询。如果您使用的是CI DB库,则可以使用以下代码进行编码(来自用户指南的示例):
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
添加回答
举报