【发布时间】:2012-04-29 17:11:49
【问题描述】:
编辑:我已经检查并且我的托管服务的 mysql 数据库设置为:
Language: English (en-utf-8)
MySQL charset: UTF-8 Unicode (utf8)
下面的“userItem”变量来自用户在表单上输入的文本字符串。
当我输入“这是 A 的用户项目”时——我在上面使用 mysql_real_escape_string——这是保存到数据库的内容:
"this is A\'s user item"
糟糕。我的测试字符串保存了一个 backslsh。
如果我注释掉 mysql_real_escape_string($userItem) 并在查询字符串中使用 $userItem -- 这就是存储在数据库中的内容:
"this is A's user item"
很好!!没有反斜杠。
但让我们面对现实吧,出于安全原因,我真的很想使用 mysql_real_escape_string —— 我被引导相信在保存之前对字符串使用 mysql_real_escape_string 更安全将它们添加到数据库中。
问题:当我检索我的文本字符串 "this is A\'s user item" 并将其显示在浏览器中时——字符串中有斜杠。这让用户感到惊讶——他们没有输入 “这是 A 的用户项目”,他们输入的是 “这是 A 的用户项目”强>。
代码如下:
$newItemInsertQuery = "INSERT INTO " . Dbases::$USERITEMS_TABLE
. " VALUES "
. "('"
. mysql_real_escape_string( $loggedInUser ) . "', '"
//. mysql_real_escape_string($userItem) . "', '" COMMENTED OUT due to extraneous backslash
. $userItem . "', '"
. mysql_real_escape_string($description) . "', '"
. mysql_real_escape_string($itemImage) . "', '"
. mysql_real_escape_string($userSubfolder) . "')";
$result = mysql_query($newItemInsertQuery);
我怀疑以下情况;
我期望在数据库插入之前对字符串使用 mysql_real_escape_string 是件好事。
但我不知道必须采取的其他步骤
【问题讨论】:
-
请在
$userItem;之前立即回显mysql_real_escape_string()并发布结果 - 您可能在其他地方还有其他转义。 -
@Eugen -- 我已经回显了 $userItem 并且没有任何反斜杠 -- 在其他地方没有应用其他转义。
-
@wantTheBest 根本不可能。仔细检查它
-
@wantTheBest 你在哪里查到的?最好取消注释并回显整个查询
标签: php mysql mysql-real-escape-string