php - mysql_real_escape_string 不适合我

标签 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);

以前是可以用的,后来不知什么原因突然不行了。 任何帮助表示赞赏。 :)

最佳答案

首先,您不应该转义数据来构建查询。您应该使用准备好的语句。参见 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()。要永久且正确地修复它,请使用准备好的语句而不是转义。

关于php - mysql_real_escape_string 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787064/

相关文章:

php - 使用 CSS 更改 Font Awesome 图标不起作用

php - 在其他页面访问MySQL连接语句

MySql 修剪字符直到一个空格

mysql - 根据 group_concat 中 min、max 的差异查询获取项目

sql - 在 postgresql 中四舍五入列值

python - 回滚多用途 python 脚本的最佳实践

php - 如何在本地wordpress中配置Rets服务器

java - 如何阻止 Java 应用程序在数据库中插入相同的值 - SQL Server

database - 在 webapp 中存储用户上传文件的最佳方式

php - 在值中使用逗号进行 Laravel 验证