哪个字符集对Mysqli-> real_escape_string是安全的

Joh*_*rgo 2 php mysql mysqli character-encoding

当时,我mysqli->real_escape_stringPHP.net#mysqli_real_escape_string中阅读有关内容。几乎没有一行,我无法理解它们的含义,以及在使用时哪个字符集是安全的real_escape_string

注意安全性:默认字符集

必须在服务器级别或使用API​​函数mysqli_set_charset()设置字符集,才能影响mysqli_real_escape_string()。有关更多信息,请参见字符集的概念部分。

是否有人可以解释我,不管utf-8或者default latin是安全与否: -

这是他们的代码段,在这里描述了情况http://in1.php.net/manual/en/mysqli.real-escape-string.php

这是什么意思 ?

<?php

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8");

// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8');

?>
Run Code Online (Sandbox Code Playgroud)

谢谢

You*_*nse 5

任何字符集(如果您正在使用) mysqli_set_charset()

另外,即使您不知道utf-8,默认值latin也是安全的。

该过程涉及两个方面。服务器和客户端。客户是您的PHP脚本。因此,仅仅因为转义是在客户端完成的(即在PHP中),PHP必须知道如何对数据进行转义。正是这样mysqli_set_charset()-它要么让服务器知道传入的数据编码,要么让服务器知道real_escape_string编码的数据。

虽然SET NAMES查询仅执行工作的一部分,但仅通知服务器,而real_escape_string保持默认状态。但是,无论哪种utf-8还是default latin都是无懈可击的。