1

我有一堆 $_POST 变量通过长格式发送,而不是用 a 对每个变量进行硬编码mysql_escape_string(),我可以执行以下操作吗?我不知道这是否真的是安全和/或可行的代码。

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

我相当肯定,因为我使用的是 &,它通过引用而不是值传递它,所以我实际上是在更改 $_POST 中的值。

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

编辑:我正在使用 PDO 和 prepare() 以及上述方法。这对我有用吗?

4

3 回答 3

10

为什么不使用array_map()

array_map(mysql_real_escape_string, $_POST);

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

mysql_real_escape_string()考虑当前数据库字符集,mysql_escape_string()不考虑。因此,相比之下,前者是更好的选择。

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

由于您已经执行了 PDO 准备语句,因此无需修改您的值。PDO 负责一切,这就是它的全部意义(如果你真的将所有数据都放在参数中,那就是- 只是连接字符串来构建 SQL 语句会导致有或没有 PDO 的灾难)。预先转义值会导致数据库中的值转义。

于 2009-04-17T05:37:55.750 回答
3

mysql_real_escape_string()是的,如果你要走那条路,你应该使用。但是确保变量安全发送到数据库的正确方法是使用参数化查询,这些查询通过mysqli函数或PDO在 PHP 中提供。

于 2009-04-17T05:41:22.527 回答
1

In addition to the previous comments, another benefit to using parameterised queries is that the database will be able to do better optimisations and probably use a cached query plan so you will get better performance.

于 2009-04-17T05:47:18.083 回答