我有一个$ _POST变量的BUNCH通过一个长形式发送,而不是使用mysql_escape_string()
对每个变量进行硬编码我可以执行以下操作吗?我不知道这是否真的是安全和/或可行的代码。
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
我很确定因为我正在使用&,它通过引用传递它,而不是值,所以我实际上是在更改$ _POST中的值。
另外,我应该使用mysql_real_escape_string()
吗?
编辑:我正在使用PDO和prepare()以及上述方法。这会照顾我吗?
答案 0 :(得分:10)
为什么不使用array_map()
?
array_map(mysql_real_escape_string, $_POST);
但实际上你应该使用参数化/预备语句。
mysql_real_escape_string()
考虑当前数据库字符集,mysql_escape_string()
没有。所以前者是比较好的替代品。
编辑(跟进OP对问题的编辑):
由于您已经完成了PDO预处理语句,因此无需修改您的值。 PDO负责所有事情,这就是它的全部要点(如果你真的将所有数据都放在参数中,那就是 - 只是连接字符串来构建SQL语句会导致PDO或没有PDO的灾难)。事先转义值会导致数据库中的转义值。
答案 1 :(得分:3)
是的,你应该使用mysql_real_escape_string()
,如果你要去那条路。但是确保变量可以安全发送到数据库的正确方法是使用Parameterized Queries,它通过mysqli函数或PDO在PHP中提供。
答案 2 :(得分:1)
除了之前的评论之外,使用参数化查询的另一个好处是数据库将能够进行更好的优化,并且可能使用缓存的查询计划,这样您将获得更好的性能。