Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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_Mysqli - Fatal编程技术网

Php 将真正的转义字符串放在同一个值内安全吗?

Php 将真正的转义字符串放在同一个值内安全吗?,php,mysql,mysqli,Php,Mysql,Mysqli,而不是 $_GET['id'] = mysqli_real_escape_string($d,$_GET['id']); 这是安全的还是有可能的,mysqli\u real\u escape\u string()不起作用,这使得$\u GET['id']仍然很危险(SQL注入)?这两种方法都是同等安全的。因为$\u GET/$\u POST/$\u请求参数是在PHP到达文件执行之前设置的 因此,从代码库中看,应该没有任何东西会与$\u GET数组交互。转义取决于数据将在其中使用的上下文。MyS

而不是

$_GET['id'] = mysqli_real_escape_string($d,$_GET['id']);

这是安全的还是有可能的,
mysqli\u real\u escape\u string()
不起作用,这使得
$\u GET['id']
仍然很危险(SQL注入)?

这两种方法都是同等安全的。因为$\u GET/$\u POST/$\u请求参数是在PHP到达文件执行之前设置的


因此,从代码库中看,应该没有任何东西会与$\u GET数组交互。

转义取决于数据将在其中使用的上下文。MySQL real escaping对HTML注入、格式错误的CSV值或任何其他需要转义字符的文本格式都不起作用。阅读

当您替换
$\u GET
数据时,这意味着下面的所有代码现在都必须专门处理SQL转义数据。如果您有任何不处理SQL的代码呢?这就是为什么这是一个糟糕的练习


更糟糕的是,您应该简单地使用参数化查询,而不是手动转义。看看你想要实现什么?根本不要逃避。参数化。不要给
$\u GET
赋值。它表示从系统外部传入的数据。操纵它并将其分配回会导致代码混乱。参数化是什么意思?使用准备好的语句,并通过占位符绑定变量<代码>$stmt=$d->prepare(“…”)并通过
$stmt->bind_param(…)进行绑定
$id = mysqli_real_escape_string($d,$_GET['id']);