2010-10-20 60 views
0

我想知道在Codeigniter中使用数据库库时是否有办法自动转义所有输入以防止注入。我知道我可以使用mysql_real_escape_string()来做到这一点,但我想知道它已经设置为自动执行此操作,如果没有,有没有包含这些的框架?从PHP框架的MySQL转义字符

谢谢!

+2

使用预处理语句,所以你可以说再见,以mysql_real_escape_string()。 – Marwelln 2010-10-20 22:57:55

+0

原谅我,通过准备语句你的意思是一个函数,清理所有的变量,然后把它们放入数据库? – 2010-10-20 23:06:35

+0

不,他的意思是[准备好的陈述](http://www.php.net/manual/en/pdo.prepared-statements.php)。 – deceze 2010-10-20 23:08:07

回答

2

为了使用准备好的语句,你可以简单地使用CodeIgniter的查询绑定。

$query = 'SELECT id, name FROM user WHERE name = ?'; 
$bind = array('Jake'); 
$this->db->query($query, $bind); 

More info found here.

1

右,漂亮实现任何类型的数据库抽象的muchallframeworks/ORM层会自动mysql_real_espace查询。如果您不想使用整个框架,请考虑一个通用的ORM库,如PropelDoctrine。或者,查看prepared statements

+0

感谢您的回复,我默认安装了CodeIgniter,并将其添加到数据库库中,并且可以将引号插入到文本输入中,然后发送到Update查询(使用数据库帮助程序),并导致语法错误。那么CodeIgniter有没有进一步的配置? – 2010-10-21 02:06:57

+0

@Pete对不起,我不明白你在问什么。从你的问题中,我认为你已经熟悉CodeIgniter并且正在寻找像CI使用的ORM库,它*不需要任何手动转义...?就我个人而言,我没有CI的经验,所以我不能告诉你任何关于它的细节。 – deceze 2010-10-21 02:09:53

1

CakePHP通过自己的方法运行所有模型查询,如果使用模型方法,它会自动清理传递给查询的任何数据。即

$options['conditions'] = array('Product.status'=>$status); 
$this->Product->find('first',$options);