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

时间:2013-10-23 05:39:09

标签: php mysql character-encoding mysqli

虽然我正在PHP.net#mysqli_real_escape_string阅读mysqli->real_escape_string。几行,我无法理解它们的含义,以及使用real_escape_string

时哪个字符集是安全的
  

警告安全性:默认字符集

     

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

有人可以解释一下,utf-8default 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');

?>

由于

1 个答案:

答案 0 :(得分:5)

如果您使用mysqli_set_charset()

,则为任何字符集

此外,即使您不是,utf-8和默认latin也是安全的。

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

虽然SET NAMES查询仅执行部分作业,但仅通知服务器,使real_escape_string处于默认状态。但是,无论如何,utf-8和默认latin都是无懈可击的。