mysqli_real_escape_string
用空格替换某些字符,例如+&€
有时%<>
。这是代码:
if(isset($_POST['msg'])) {
//
$msg = mysqli_real_escape_string($con, $_POST['msg']);
if(strlen($msg)>128) {
die('<p id="red">Message CANNOT be more than 128 characters</p>');
}
if(strlen($msg)<5) {
die('<p id="red">Message CANNOT be less than 5 characters</p>');
}
//update msg
$sbUpdate = $con->query('UPDATE sB SET un="'.$xun.'", msg="'.$msg.'" WHERE id ="0"');
if($sbUpdate===TRUE) {
echo('Sent!');
}else {
echo('Error! could not send.');
}
}else {
echo('Error');
}
首先,MySQL不支持双引号。请改用单引号表示值。
其次,如果您参考文档,您将看到:
编码的字符为 NUL (ASCII 0)、'、''r、''、'、" 和 Control-Z。
第三,有一个巨大的警告:
谨慎
安全性:默认字符集
字符集必须在服务器级别设置,或使用 API 函数
mysqli_set_charset()
,使其影响mysqli_real_escape_string()
.请参阅有关角色的概念部分 集以获取更多信息。
根据您的字符集,您的角色可能会被吞噬。
最后但并非最不重要的一点是,为了避免这样的问题,你最好使用预准备语句。