root@localhost不能通过PHP (PDO)连接到数据库


root@localhost can't connect to database through PHP (PDO)

我已经尝试通过PHP连接到我的数据库几个小时了,没有成功。我的PHP代码是这样的:

<?php
    ini_set('display_errors', 'On');
    $hostname = 'localhost';
    $username = 'root';
    $password = '';
    function testdb_connect($hostname, $username, $password) {
        $db = new PDO("mysql:host=$hostname;dbname=asdf", $username, $password);
        return $db;
    }
    try {
        $db = testdb_connect($hostname, $username, $password);
        echo 'Connected to database';
    } catch(PDOException $e) {
        echo $e->getMessage();
        }
    ?>

我已经试过了:

  • 检查'root'是否配置为'localhost' (Y)
  • 检查root@localhost是否有Grant_priv/Super_priv权限两个)
  • 检查是否Apache/MySQL正在运行(Y为两者)检查是否我的PHP
  • 代码是错误的,即我错过了一些东西(N)

你知道问题出在哪里吗?提前感谢!

编辑:

我很抱歉,我今天经常看到错误信息,我忘了在这里提一下:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

改订:

下面是我创建用户的php代码:
<?php
    ini_set('display_errors', 'On');
    $hostname = 'localhost';
    $username = 'myUserName';
    $password = 'thatUserPassword';
    function testdb_connect($hostname, $username, $password) {
        $db = new PDO("mysql:host=$hostname;dbname=asdf", $username, $password);
        return $db;
    }
    try {
        $db = testdb_connect($hostname, $username,    $password);
        echo 'Connected to database';
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
    ?>

错误信息:

SQLSTATE[HY000] [1045] Access denied for user 'myUserName'@'localhost' (using password: YES)

假设我这样做:

<?php
    $db = new PDO('mysql:host=localhostaaa;dbname=so_gibberish;charset=utf8', 'myUser', 'myPassword');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "I am right here<br/>";
?>

当出现错误时,我得到一个白屏。

假设我这样做:

B

<?php
    try {
        $db = new PDO('mysql:host=localhostxxxx;dbname=so_gibberish;charset=utf8', 'fred', 'password');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
        exit();
    }
    echo "You are connected<br/>";
?>

然后B给出连接错误信息

编辑:

基于对Question的编辑,请创建一个带有密码的用户,并传递该密码,而不是一个空字符串。

不要以root帐户连接,因为它是用于维护的管理员帐户。使用root会使您面临脚本组成和凭证被盗的风险(如果是内置的,而不是在vault中),从而允许黑客访问您的所有数据库。

错误:

[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)

可能是my.cnf文件和bind-address设置的问题。我得看看。

我的建议是创建一个非根用户'jimmy987'@'%',并执行

SET PASSWORD FOR 'jimmy987'@'%'=PASSWORD('');

查看是否对该用户有效,然后删除该用户。请注意,如果成功,错误消息将更改,可能会提示没有使用数据库的权利。因为没有执行授予。

基于似乎暗示服务器期望一个空密码的文章。

那么我们需要解决为什么。

除此之外,我将不得不做一个TeamViewer会话来看看发生了什么(因为我当然看不到你真正在运行什么)。我很想知道答案,当你解决它

既然你没有提到确切的错误,恐怕我们大多数人都很难猜出来。试试这个来改变一下?

<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "asdf";
try
{
 $db_con = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
 $db_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
 $e->getMessage();
}
?>