【问题标题】:mysql_real_escape_string not working for me [duplicate]mysql_real_escape_string 不适合我[重复]
【发布时间】:2017-01-22 03:38:04
【问题描述】:

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

它以前可以工作,但由于某种原因它突然停止工作。 任何帮助表示赞赏。 :)

【问题讨论】:

  • 你必须传递连接对象..` mysql_real_escape_string($connection_object,$_POST['username']);`

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


【解决方案1】:

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

【讨论】:

  • 我试过用mysqli,还是不行。我做了mysqli_real_escape_string($_POST['username']); 仍然没有。
  • @FranciscoF。注意参数:string mysqli_real_escape_string ( mysqli $link , string $escapestr )。在您的情况下,第一个参数应该是$db。所以,实际的行是$username = mysqli_real_escape_string($db, $_POST['username']);
  • 所以应该是mysqli_real_escape_string($db, $_POST['username'])?
  • 正如@EdCottrell 建议的那样,查看准备好的语句,然后你就不需要使用转义字符串了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2020-05-11
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多