为什么mysql_real_escape_string不能在$ _POST上工作?

时间:2016-05-02 06:58:49

标签: php mysql security

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

   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定义新的$变量来逃避它?这是安全老虎钳。我将在某个时候转向PDO,但目前我仍然坚持使用旧的mysql API。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

这是错的。您之前不必将$_POST数组中的值放入变量中,它也可以直接使用$_POST

考虑使用mysqliPDO代替mysql