在插入MySQL时转义PHP中的单引号

这个问题在这里已经有了答案:

  • 我如何防止PHP中的SQL注入? 28个答案

  • 你应该用mysql_real_escape_string()来转义每个字符串(在这两个片段中mysql_real_escape_string()

    http://us3.php.net/mysql-real-escape-string

    你的两个查询行为不同的原因可能是因为你开启了magic_quotes_gpc (你应该知道这是一个坏主意)。 这意味着从$ _GET,$ _POST和$ _COOKIES收集到的字符串会被转义(即"O'Brien" -> "O'Brien" )。

    一旦你存储了数据,然后再次检索它,你从数据库中取回的字符串将不会自动为你逃脱。 你会回来"O'Brien" 。 所以,你需要通过mysql_real_escape_string()来传递它。


    对于任何在2015年找到这个解决方案并前进的人......

    mysql_real_escape_string()函数从PHP 5.5.0开始已弃用。

    请参阅:php.net

    警告

    此扩展从PHP 5.5.0开始已弃用,并将在未来删除。 相反,应该使用MySQLi或PDO_MySQL扩展。 另请参阅MySQL:选择API指南和相关FAQ以获取更多信息。 这个功能的替代方案包括:

    mysqli_real_escape_string()

    PDO::quote()


    你应该这样做来帮助你调试

    $sql = "insert into blah blah....";
    echo $sql;
    

    您可能会发现单引号在正在运行的查询中使用反斜杠进行转义。 这可能是由php通过magic_quotes_gpc设置自动完成的,也可能是你自己在代码的其他部分完成的(addslashes和stripslashes可能是需要查找的函数)。

    见http://php.net/manual/en/security.magicquotes.php

    链接地址: http://www.djcxy.com/p/16719.html

    上一篇: Escaping single quote in PHP when inserting into MySQL

    下一篇: grunt requirejs ignores paths from my mainConfigFile