虽然我正在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');
?>
由于
答案 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
都是无懈可击的。