好的,我遇到了 mysql_real_escape_string 的问题。这是一个带有标题和内容的简单 POST 表,理论上应该可以正常工作(对我而言)。
$db = new mysqli('...','...','...','...') or die ('error with connection');
$db->set_charset('utf8');
$title = trim($_POST['title']);
$contents = trim($_POST['contents']);
$title = mysql_real_escape_string($title);
$contents = mysql_real_escape_string($contents);
$sql = "INSERT INTO posts SET title = '$title', contents = '$contents'";
$query = $db->query($sql);
当我在“mysql_escape_string”前后放置“echo”时,我发现:
echo 'before' . $title;
$title = mysql_real_escape_string($title);
echo 'after' . $title;
它在“之前”行回显标题,但在“之后”行回显空白 $title。
注意:当我使用“mysql_escape_string”代替(真实的)时,它工作正常(但我猜这是较弱的保护)。
有什么想法吗? 谢谢。
最佳答案
title
为空的原因是因为 mysql_real_escape_string正在返回 FALSE
。
发生这种情况是因为它需要一个 MySQL 连接到数据库,你有 MySQLi。从文档中,
在使用 mysql_real_escape_string() 之前需要一个 MySQL 连接,否则会产生 E_WARNING 级别的错误,并返回 FALSE
解决问题的方法是使用 mysqli_real_escape_string按照其他答案中的建议匹配您的数据库连接。显然,为了安全起见,最好使用准备好的语句。
此外,还需要提供数据库链接。由于您使用的是 OO 样式,因此完成方式为
$db = new mysqli()
$title = $db->real_escape_string($title)
关于php - mysql_real_escape_string 删除变量内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841094/