php - root@localhost 无法通过 PHP (PDO) 连接到数据库

标签 php mysql 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 权限(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)

最佳答案

假设我这样做:

一个

<?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 设置有问题。需要看到这一点。

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

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

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

基于似乎暗示服务器需要空白密码的文章。

然后我们需要解决原因。

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

关于php - root@localhost 无法通过 PHP (PDO) 连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553314/

相关文章:

javascript - 如何显示由 ajax 调用运行的 PHP 文件的回显?

php按自定义顺序对多维数组进行排序

php - 如何去除特殊字符?

mysql - COUNT() 返回不正确的行数

PHP 分支优化和效率

php - 在 PHP 中使用 SQL 查询获取当前(系统)日

javascript - 由于 div 显示/隐藏而获取错误的 POST 值

php - PDO 绑定(bind)未知数量的参数?

php在设置准备语句的try block 中执行 undefined variable

php - MySQL 过程不返回第一行