代码之家  ›  专栏  ›  技术社区  ›  Francisco F.

mysql_real_escape_string不适用于我[重复]

  •  3
  • Francisco F.  · 技术社区  · 7 年前

    当我试着做 mysql_real_escape_string 对于登录系统,它不会记录表单中的变量

    $username = $_POST['username'];
    

    然后回显它,它会显示出来,但当我这样做时

    $username = mysql_real_escape_string($_POST['username']);
    

    并对其进行回显,则不会显示。我还测试了数据库连接,它们工作正常。这是我的代码:

    session_start();
    $db = mysqli_connect($connection, $user, $pass, $database);
    if (isset($_POST['submit'])) {
        $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string($_POST['password']);
        echo $username;
    
        $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
        echo $sql;
        $result = mysqli_query($sql, $db);
    

    它以前工作过,但由于某种原因突然停止工作。 感谢任何帮助。:)

    1 回复  |  直到 7 年前
        1
  •  4
  •   Community Muhammed Neswine    7 年前

    首先,您不应该为了构建查询而转义数据。你应该使用准备好的语句。看见 How can I prevent SQL injection in PHP?

    也就是说,你的问题是你正在使用 mysql_real_escape_string() ,但你有 mysqli (不是 mysql )连接。 mysqli mysql 是不同的扩展。请 don't use mysql_* ; 这个 mysql_* 功能过时, deprecated ,并且不安全-它们已从现代版本的PHP(7.0及更高版本)中完全删除。使用 MySQLi PDO 相反

    解决你的问题 暂时 使用 mysqli_real_escape_string() 而不是 mysql_real_escape_string() .为了解决它 永久正确 ,使用准备好的语句,不要转义。