【问题标题】:root@localhost can't connect to database through PHP (PDO)root@localhost 无法通过 PHP (PDO) 连接到数据库
【发布时间】:2015-12-09 18:38:29
【问题描述】:

我已经尝试通过 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 权限(Y 两者都适用)
  • 检查 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)

【问题讨论】:

  • 您能提供更多信息吗?你遇到了什么错误?
  • 没有确切的错误信息,我们帮不上什么忙。
  • @Quentin 是否对所有答案投了反对票?
  • 我猜@maytham-ɯɐɥıλɐɯ 我们的答案必须被表达出来,以便处理每一个可以想象的咨询责任或警告评论,从而使它们变得如此淡化和生产缓慢,以至于当它们到达时, OP已经筋疲力尽了。所以这将是我的下一个策略。也就是说,在我身边有一群律师回答
  • 我可以告诉你@HawasKaPujaari,但你可能不喜欢这个答案,也不会在这里输入

标签: php mysql pdo


【解决方案1】:

假设我这样做:

一个

<?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给我连接错误信息

编辑:

根据对问题的编辑,请使用密码创建用户,并传递该密码,而不是空白字符串。

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

错误:

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

my.cnf 文件和 bind-address 设置可能存在问题。需要看看。

我的建议是创建一个非 root 用户 'jimmy987'@'%',然后做一个

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

查看它是否适用于该用户,然后删除该用户。请注意,如果成功,错误消息会发生变化,可能会抱怨没有使用数据库的权限。因为赠款没有执行。

根据似乎暗示服务器需要一个空白密码的文章。

那么我们需要解决原因。

除此之外,我还必须进行 TeamViewer 会话以查看发生了什么(因为我当然看不到您真正在运行什么)。当你修复它时,我很想知道答案。

【讨论】:

  • 我现在在问题中添加了错误消息。任何想法如何解决它?
  • @Drew 是的,那是我最初的尝试……但是我收到了相同的错误消息,尽管我授予了该用户所有权限。
  • P.S.这就是为什么我用 root 尝试它,因为我认为问题可能是基于用户的
  • 有这个article关于删除匿名用户
  • dba.stackexchange.com/a/4615 ... 很高兴知道这是否是问题
【解决方案2】:

由于您没有提到 exact 错误,恐怕我们大多数人都很难猜到。试试这个换一下?

<?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();
}
?>

【讨论】:

  • 谁知道呢,反正我们不能用这些积分购买芝士汉堡。只是帮助并继续前进:)
  • 我现在在问题中添加了错误消息。任何想法如何解决它?
  • @MoneyIsAMotivation,您需要拥有/创建一个带密码的用户,然后提供凭据而不是空密码字符串。或者您可以更改 root 的密码并提供该密码。在这里阅读更多:stackoverflow.com/questions/2995054/…
  • @HawasKaPujaari 已经尝试过了,但没有成功......(这是我最初的尝试)
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 2010-10-02
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多