警告:mysql_connect():访问被拒绝,用户'root'@'localhost'(使用密码:YES)

5

警告:mysql_connect():在 C:\xampp\htdocs\Login\sessionHandler.php 的第 35 行访问被拒绝,用户 'root'@'localhost'(使用密码:YES)

因此,这就是第 35 行的内容。

//to make a connection with database
$conn = mysql_connect("localhost", "root", "password") or die(mysql_error());

我不知道问题出在哪里,或者是我的代码有问题。 我已经搜索了所有可能的答案,但都不是我要找的。

this is my code (if the problem is not really on the line 35)

//validation error flag
$errflag = false;

//Input Validation
if($_POST['uname'] == '')
{
    $errmsg_arr[]='Login ID missing';
    $errflag = true;
}
if($_POST['pword'] == '')
{
    $errmsg_arr[] = 'Password missing';
    $errflag = true;
}


//if there are input validations, redirect back to the login form
if($errflag)
{
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: login.php");
    exit();
}

//to make a connection with database
$conn = mysql_connect("localhost", "root", "password") or die(mysql_error());


//to select the targeted database
mysql_select_db("ngchoonching", $conn) or die(mysql_error());

//to create a query to be executed in sql
$username = $_POST['uname'];
$password = $_POST['pword'];
$query = "SELECT * FROM profile WHERE username = '$username' AND password = '$password'";

//to run sql query in database
$result= mysql_query($query, $conn) or die(mysql_error());

//check whether the query was successful or not
if(isset($result))
{
    if(mysql_num_rows($result) == 1)
    {
        //Login successful
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
        $_SESSION['SESS_LAST_NAME'] = $member['lastname'];
        $_SESSION['STATUS'] = true;
        session_write_close();
        header("location: login-successful.php");
        exit();
    }
    else
    {
        //login failed
        header("location: login-failed.html");
        exit();
    }
}
else
{
    die("Query failed");
}

?>

I use localhost,phpmyadmin,xampp and I don't understand why the access is denied.


3
这不是代码问题,而是数据库权限问题。执行 show grants for root@localhost; 会显示什么内容? - Barmar
3
请避免常规使用 mysql ,而要使用 mysqli 或更好的 PDO - Idris
@Barmar,它表示GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTIONGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION - Cheryl Perry
你现有的代码可能存在简单的SQL注入漏洞,攻击者可以利用这个漏洞从你的表中返回一行数据并使用它来进行身份验证,甚至登录为任何人。请使用mysqli或PDO与预处理查询来避免此类漏洞。 - Lawrence Cherone
@Barmar 对不起,我该怎么办?这是我第一次做这个,我还在学习中。 - Cheryl Perry
1个回答

11

尝试连接数据库,使用以下代码:$conn = mysql_connect("localhost", "root")$conn = mysql_connect("localhost", "root", "")


请注意,这是使用MySQL的过时方法。建议使用mysqli或PDO代替。

真的有效!谢谢!但是为什么我必须删除“密码”?我只想知道这有什么区别。 - Cheryl Perry
3
很可能是因为您没有设置根密码。换句话说,您的SQL设置极其、极其容易受到攻击。这篇文章提供了许多有关保护它的入门提示。此文章 - Rogue
可能是访问权限问题... 尝试使用 "select * from mysql.users" 查看具有密码的用户。在您的情况下,root 的密码可能为空...如果您在开发过程中设置了密码,请将 "password" 参数恢复。 - onedevteam.com
@Rogue 听起来很糟糕,谢谢你提供的信息! - Cheryl Perry
1
@onedevteam.com 非常感谢!这对我帮助很大。 - Cheryl Perry
在你修复之前,请使用“x'或id ='1”作为登录表单上的密码来测试漏洞。@NadiaPerry - Lawrence Cherone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接