mysql_real_escape_string对我不起作用

时间:2017-01-22 03:38:04

标签: php sql database mysql-real-escape-string

当我尝试为登录系统执行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 个答案:

答案 0 :(得分:4)

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

也就是说,您的问题是您正在使用mysql_real_escape_string(),但您有mysqli(非mysql)连接。 mysqlimysql是不同的扩展名。请don't use mysql_*; mysql_*函数已过时,deprecated和不安全 - 它们已完全从现代版本的PHP(7.0及更高版本)中删除。请改用MySQLiPDO

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