php - mysql_real_escape_string 删除变量内容

标签 php mysql mysql-real-escape-string

好的,我遇到了 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/

相关文章:

php - 我提交查询时插入的日期错误?

javascript - 将值发送到客户端页面

javascript - 在一个 ajax 帖子上发布表单和文本区域

Php: sql 错误 "Error: Unknown column ' RM' in 'where clause' with query"

php - 在提交表单时,勾选会终止应用程序。但仅限于生产

php - SQL-Server 'uniqueidentifier' 列类型到 MySQL 的迁移问题

javascript - Cordova 游戏 - 试图让我的网站发布在线高分

mysql - 删除mysql数据库中所有外键

php - mysql_real_escape_string 不转义"

php - mysqli 查询问题。 mysqli_real_escape_string 错误