当我尝试为登录系统执行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);
以前曾经工作过,但由于某种原因,它突然停止工作。
任何帮助表示赞赏。 :)
答案 0 :(得分:4)
首先,您不应该转义数据来构建查询。你应该使用准备好的陈述。见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()
。要永久正确地修复 ,请使用预准备语句而不是转义。