这是至少温和安全的PHP代码?

hel*_*dre 1 php mysql security post mysql-real-escape-string

我有一个$ _POST变量的BUNCH通过一个长形式发送,而不是硬编码每一个用一个mysql_escape_string()是可以让我做以下吗?我不知道这是否真的是安全和/或可行的代码.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}
Run Code Online (Sandbox Code Playgroud)

我很确定,因为我正在使用&,它通过引用传递它,而不是值,所以我实际上是在改变$ _POST中的值.

另外,我应该使用mysql_real_escape_string()吗?

编辑:我正在使用PDO和prepare()以及上述方法.这会照顾我吗?

Tom*_*lak 10

为什么不用array_map()

array_map(mysql_real_escape_string, $_POST);
Run Code Online (Sandbox Code Playgroud)

但实际上你应该使用参数化/准备好的语句.

mysql_real_escape_string()将当前数据库字符集考虑在内,mysql_escape_string()不会.所以前者是比较好的替代方案.

编辑(跟进OP对问题的编辑):

由于您已经完成了PDO预处理语句,因此无需修改您的值.PDO负责所有事情,这就是它的全部要点(如果你真的将所有数据都放在参数中,那就是 - 只是连接字符串来构建SQL语句会导致PDO或没有PDO的灾难).事先转义值会导致数据库中的转义值.