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
)连接。 mysqli
和 mysql
是不同的扩展名。请 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()
。要永久且正确地修复它,请使用准备好的语句而不是转义。
当我尝试为登录系统执行 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
)连接。 mysqli
和 mysql
是不同的扩展名。请 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()
。要永久且正确地修复它,请使用准备好的语句而不是转义。