mysql_real_escape_string 不适合我

mysql_real_escape_string not working for me

当我尝试为登录系统执行 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);

以前是可以用的,但是不知为何突然不可用了。 任何帮助表示赞赏。 :)

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

就是说,您的问题是您使用的是 mysql_real_escape_string(),但您有 mysqli(不是 mysql)连接。 mysqlimysql 是不同的扩展名。请 don't use mysql_*; the mysql_* functions are outdated, deprecated, and insecure - they have been removed entirely from modern versions of PHP (version 7.0 and higher). Use MySQLi or PDO 代替。

暂时解决您的问题,请使用mysqli_real_escape_string()而不是mysql_real_escape_string()。要永久且正确地修复它,请使用准备好的语句而不是转义。