我有一堆 $_POST 变量通过长格式发送,而不是用 mysql_escape_string()
对每个变量进行硬编码,我可以执行以下操作吗?我不知道这是否真的安全和/或可行的代码。
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
我相当确定,因为我使用的是 &,它是通过引用而不是值传递的,所以我实际上是在更改 $_POST 中的值。
另外,我应该改用 mysql_real_escape_string()
吗?
编辑:我正在使用 PDO 和 prepare() 以及上述方法。这对我有好处吗?
最佳答案
为什么不使用 array_map()
?
array_map(mysql_real_escape_string, $_POST);
但实际上您应该使用参数化/准备好的语句。
mysql_real_escape_string()
考虑了当前数据库字符集,mysql_escape_string()
没有。因此,相比之下,前者是更好的选择。
编辑(跟进 OP 对问题的编辑):
由于您已经执行了 PDO 准备语句,因此无需修改您的值。 PDO 处理所有事情,这就是它的全部意义(如果您真的将所有数据都放在参数中,那就是 - 只是连接字符串来构建 SQL 语句会导致 PDO 或不使用 PDO 的灾难)。预先转义值会导致数据库中出现转义值。
关于php - 这至少是适度安全的 php 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759149/