由于某种原因,用户“@'localhost”(使用密码:NO)的访问被拒绝


Access denied for user ''@'localhost' (using password: NO) for some reason?

<?php
$con=mysqli_connect("localhost","root","123456","astralms");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
$username = htmlspecialchars(mysql_real_escape_string($_GET['username']));
$result = mysqli_query($con,"SELECT * FROM accounts WHERE name = '$username'");
while($row = mysqli_fetch_array($result))
  {
    echo $row['gm'];
    echo "<>";
    echo $row['vpoints'];
    echo "<>";
    echo $row['ACash'];
   }
?>

这是我的代码。所有信息都是100%正确的。但是,即使我确实输入了密码,它也表现得好像我没有。

这是为什么呢?谢谢!

您正在使用对旧的、已弃用的mysql函数的调用来调用mysql_real_escape_string

这两个扩展具有不同的连接,请勿混合使用。

对转义

函数的调用需要活动连接,因为转义必须知道当前的编码设置。mysql 扩展没有连接,正在使用 php.ini 的默认参数打开一个连接。幸运的是,它不适用于这些。

您有一个mysqli连接,因此您需要使用 mysqli_real_escape_string() 而不是使用 mysql_real_escape_string((

您看到的错误是由于 mysql_real_escape_string(( 尝试建立自己的连接,因为没有使用旧 api 的连接处于活动状态。

编辑:mysqli_real_escape_string将与数据库的连接作为第一个参数,因此在您的情况下,您会这样称呼它;

mysqli_real_escape_string($con, $_GET['username'])