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');
}
答案 0 :(得分:2)
首先,MySQL不支持双引号。改为使用单引号作为值。
其次,如果你引用docs,你会看到:
编码的字符是NUL(ASCII 0),\ n,\ r,\,',“和Control-Z。
第三,有这个巨大的警告:
注意
安全性:默认字符集
字符集必须在服务器级别设置,或者使用 API函数
mysqli_set_charset()
让它影响mysqli_real_escape_string()
。请参阅有关角色的概念部分 设置更多信息。
根据您的字符集,您的角色可能会被吞下。
最后但并非最不重要的是,为了避免像这样的问题,你最好使用prepared statements。