编辑:我已经检查并且我的托管服务的 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 更安全。
问题:当我检索我的文本字符串“这是 A\ 的用户项” 并将其显示在浏览器中时 - 它在字符串中有斜杠。这让用户感到惊讶——他们没有输入“这是 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 是件好事是有效的。
但我不知道必须采取的其他步骤