更新 MySQL 文本字段行时生成不需要的反斜杠

Posted

技术标签:

【中文标题】更新 MySQL 文本字段行时生成不需要的反斜杠【英文标题】:Unwanted backslash being generated when MySQL text field row is updated 【发布时间】:2012-11-07 00:01:40 【问题描述】:

我有通过文本区域更新 mysql 表行的代码(所有代码都在同一页面上)。更新表单(html 部分)在 php if 语句中回显。当用户单击“编辑”按钮时,会弹出一个 textrea(通过使用 javascript)。他们输入他们的更新并点击提交,它会立即在 MySQL 数据库和网站上更新它。代码如下:


PHP(回显的 HTML 表单)

echo "<span id=\"about_me\">".$row['aboutme']."</span><span style=\"font-size:10px;\"><a id=\"popup\">Edit</a></span></p>
    <form style\"display:none;\" method=\"post\">
    <textarea rows=\"5\" cols=\"31\" id=\"area\" name=\"about_update\" style=\"display:none\" placeholder=\"Type 140 characters or less and press submit.\"></textarea>
    <input style=\"display:none;\" type=\"submit\" id=\"aboutsubmit\" value=\"Submit\" />
    </form>";

PHP

if (isset($_POST['about_update'])) 
    $about_update = $mysqli->real_escape_string($_POST['about_update']);
    $update = "UPDATE tbl_name SET aboutme='$about_update' 
        WHERE firstname='$firstname' && lastname='$lastname'";
    $mysqli->query($update);

它所有的功能都正常,除了当你使用撇号时,它会在它前面放置一个\。 MySQL 中 aboutme 行的类型是 TEXT btw。为什么 textarea 会生成这个 \

【问题讨论】:

这与转义有关。至少,我想不出其他原因。 是的,我也想到了,我假设 PHP 是这样解释的,我只是不知道如何防止它...... stripslashes() 或 stripcslashes() 可能会成功。阅读此php.net/manual/en/function.stripslashes.php 确保你也禁用了magic_quotes_gpc。这可以在您的 .htaccess 文件中完成,例如 php_flag magic_quotes_gpc off @Digitalis,您的解决方案奏效了!随意添加它,以便我接受它。 mmmshuddup,我会调查你的。还有加法器,我在代码的前面转义了 $firstname 和 $lastname。感谢大家的帮助! 【参考方案1】:

如果你无法访问你的 php.ini 文件,下面的函数应该可以工作:

function escapeString($value)
global $mysqli;
  if(get_magic_quotes_gpc())
    $value=stripslashes($value);
  
  $value=$mysqli->real_escape_string($value);
  return $value;

确保在打开数据库连接后放置函数:)

代替你的

$mysqli->real_escape_string();

$someVariable=escapeString($variableYouWantToEscspe);

希望这行得通!

编辑:正在发生的事情是撇号被魔术引号转义一次,然后转义的字符串再次被 real_escape_string 函数转义。您要做的是仅在魔术引号插入它们(第一个 if 语句)然后转义字符串时删除任何反斜杠,或者如果魔术引号未打开,则转义字符串:)

【讨论】:

我认为 escapeString 需要开启 SQLite3。不是stripslashes吗? escapeString 是自定义函数吗?除了打开的数据库连接之外,它不需要任何其他东西。仅当魔术引号打开时才需要stripslashes,否则只需转义它。 是的 :) 如果您愿意,您可以重命名该函数 :) 查看我的编辑以了解其工作原理 对不起,我在代码中犯了一些错误,现在应该可以正常工作了! 对不起,我什至没有注意到你在上面写了这个函数,我刚刚认出了它的名字。我该睡觉了

以上是关于更新 MySQL 文本字段行时生成不需要的反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 中的反斜杠 \,真是太坑了!!

在 MySQL 中的反斜杠 \,太反人类了!!

这MySQL里的反斜杠(\)也太坑了吧!!真是醉了

MySQL 中的反斜杠 \,真是太坑了!!

MySQL 中的反斜杠 \,真是太坑了!!

MySQL 中的反斜杠 \,真是太坑了!!