4

同时,我在PHP.net#mysqli_real_escape_string中阅读有关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');

?>

谢谢

4

1 回答 1

6

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

此外,即使您不这样做utf-8,默认值也是安全的。latin

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

SET NAMES查询只完成部分工作,只通知服务器,保持real_escape_string默认状态。但是,anyutf-8和 defaultlatin无论如何都是无懈可击的。

于 2013-10-23T05:42:22.917 回答