Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这至少是轻度安全的php代码吗?_Php_Mysql_Security_Post_Mysql Real Escape String - Fatal编程技术网

这至少是轻度安全的php代码吗?

这至少是轻度安全的php代码吗?,php,mysql,security,post,mysql-real-escape-string,Php,Mysql,Security,Post,Mysql Real Escape String,我有一堆$u POST变量通过一个长表单发送进来,而不是用mysql\u escape\u string()对每个变量进行硬编码,我可以执行以下操作吗?我不知道这是否是真正安全和/或可行的代码 foreach ($_POST as &$post_item){ $post_item = mysql_escape_string($post_item); } 我很确定,因为我使用了&,它是通过引用传递的,而不是值,所以我实际上是在更改$u POST中的值 另外,我是否应该使用mysq

我有一堆$u POST变量通过一个长表单发送进来,而不是用
mysql\u escape\u string()
对每个变量进行硬编码,我可以执行以下操作吗?我不知道这是否是真正安全和/或可行的代码

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}
我很确定,因为我使用了&,它是通过引用传递的,而不是值,所以我实际上是在更改$u POST中的值

另外,我是否应该使用
mysql\u real\u escape\u string()


编辑:我正在使用PDO和prepare()以及上述方法。这能帮我解决吗

为什么不使用
数组映射()

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

mysql\u real\u escape\u string()
将当前数据库字符集考虑在内,
mysql\u escape\u string()
不考虑。因此,相比之下,前者是更好的选择

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


因为您已经完成了PDO准备的语句,所以不需要修改您的值。PDO负责一切,这就是它的全部意义(如果你真的把所有数据都放在参数中,也就是说——只要连接字符串来构建SQL语句,不管有没有PDO,都会导致灾难)。预先转义值将导致数据库中的转义值。

为什么不使用
数组映射()

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

mysql\u real\u escape\u string()
将当前数据库字符集考虑在内,
mysql\u escape\u string()
不考虑。因此,相比之下,前者是更好的选择

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


因为您已经完成了PDO准备的语句,所以不需要修改您的值。PDO负责一切,这就是它的全部意义(如果你真的把所有数据都放在参数中,也就是说——只要连接字符串来构建SQL语句,不管有没有PDO,都会导致灾难)。预先转义这些值会导致数据库中的转义值。

是的,如果要这样做,应该使用
mysql\u real\u escape\u string()
。但是确保变量安全地发送到数据库的正确方法是使用PHP中通过函数或提供的变量。

是的,如果要这样做,您应该使用
mysql\u real\u escape\u string()
。但确保变量安全发送到数据库的正确方法是使用PHP中提供的函数或。除了前面的注释,使用参数化查询的另一个好处是,数据库将能够进行更好的优化,并且可能会使用缓存查询计划,以便获得更好的性能。

除了前面的注释,使用参数化查询的另一个好处是,数据库将能够进行更好的优化,并且可能会使用缓存查询计划,因此您将获得更好的性能。

在PHP5中,没有任何内容是按值传递的。所有内容都是通过引用传递的。我认为实际上,默认情况下,只有对象和资源是通过引用传递的。如果您使用PDO和prepared语句,那么您根本不应该使用mysql_real_escape_string。在PHP5中,没有任何内容是通过值传递的。所有内容都是通过引用传递的。我认为实际上,默认情况下,只有对象和资源是通过引用传递的。如果您使用的是PDO和prepared语句,那么您根本不应该使用mysql\u real\u escape\u string。
array_map(mysql_real_escape_string, $_POST);