1

据我了解,使用 $this->db->insert() 转义值:

http://codeigniter.com/user_guide/database/active_record.html#insert

Note: All values are escaped automatically producing safer queries.

但是当我查看 mysql 时,我的输入没有被转义,是否由于某种原因删除了一些如何?

担心这里的sql注入,这就是我问的原因。

4

2 回答 2

2

当您为 SQL 语句转义字符串时,这并不一定意味着您稍后查看数据时应该看到添加的反斜杠。这意味着某些字符将被转义,SQL 语句将运行而不会出现任何错误。尝试使用mysql_real_escape_string插入数据

线路:557 https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Input.php

if ( ! is_php('5.4') && get_magic_quotes_gpc())
{
    $str = stripslashes($str);
}

接着

线路:285 https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php

$str = is_resource($this->conn_id) ? mysql_real_escape_string($str, $this->conn_id) : addslashes($str);

该字符串通过mysql_real_escape_string添加斜杠传递。因此,我们可以说考虑到了针对 SQL 注入的安全措施。

于 2012-06-24T03:19:42.437 回答
0

通过“逃脱”,他们的意思是替换这个:

SELECT * FROM table1 WHERE field1 LIKE "some string with " quotes"

为了这:

SELECT * FROM table1 WHERE field1 LIKE "some string with \" quotes"

如果您想确保在保存之前对字符串进行转义,请考虑使用以下$this->db->escape*方法:http ://codeigniter.com/user_guide/database/queries.html

另外,检查:

于 2012-06-24T04:07:57.313 回答