【问题标题】:Why mysql_real_escape_string doesn't work on $_POST?为什么 mysql_real_escape_string 在 $_POST 上不起作用?
【发布时间】:2016-05-02 06:58:48
【问题描述】:

例如,此代码不会转义数据库的注释字符串:

   if ($_POST['comment']) {
    $comment = mysql_real_escape_string(htmlentities($_POST['comment_txt']));
    $comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'")
    or die;
    }

但是这个会:

 if ($_POST['comment']) {
    $comment_p = $_POST['comment_txt'];
    $comment = mysql_real_escape_string(htmlentities($comment_p));
    $comment_insert = mysql_query("UPDATE msgs SET msg='$comment' WHERE user='$username'")
    or die;
    }

为什么?为什么我不能转义 $_POST 值?为什么我必须为 $_POST 定义新的 $variable 才能转义它?这是安全虎钳。我会在某个时候转向 PDO,但目前我被旧的 mysql API 卡住了。

【问题讨论】:

  • 是的,对不起,我在这里打错了。现在编辑问题中的代码。谢谢。
  • 它也适用于$_POST..我总是直接在$_POST上使用该功能,您的代码似乎没有问题,我认为可能是因为mysql,一旦尝试使用@ 987654326@

标签: php mysql security


【解决方案1】:

试试这个,它可能对你有帮助:

$comment = mysql_real_escape_string(htmlentities($_POST['comment_txt'], ENT_QUOTES, "UTF-8"));

从这里查看详细信息: PHP $_POST doesn't take accents

【讨论】:

  • 如果我将数据库全部更改为 utf-8,它会做同样的事情吗?
  • 我认为不是数据库问题,您必须添加 utf-8 元标记。按照我给出的链接....
【解决方案2】:

那是错误的。之前不必将$_POST 数组中的值放入变量中,它也可以直接作用于$_POST

请考虑使用mysqliPDO 而不是mysql

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多