当mysql命令行工作时,为什么PHP PDO会收到"SQLSTATE [42000] [1044]用户拒绝访问"?

Rob*_*sen 6 php mysql database pdo database-permissions

在过去的几个小时里,我一直在用力撞击这堵墙,我的头脑很血腥.:(

正如标题所暗示的,我已经创建了一个可以访问数据库MySQL用户罚款从MySQL命令提示符在数据库服务器上.但是,当我尝试实例化一个新的PDO对象以使用同一个用户访问数据库时,我得到:

SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database'
Run Code Online (Sandbox Code Playgroud)

这是我创建用户的方式:

GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password';
Run Code Online (Sandbox Code Playgroud)

这可能是什么问题?!请有人给我一个骨头!(仅供参考,当我尝试创建一个新的PDO对象时会出现问题...我捕获了一个PDOException,这就是消息).

授权后我做了FLUSH PRIVILEGES,这是SHOW GRANTS的输出:

mysql> SHOW GRANTS FOR 'bob'@'localhost';
+------------------------------------------------------------------------------------------------------------+
| Grants for bob@localhost                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost'                      |
+------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

以下是这个用户的mysql.db:

mysql> SELECT * FROM db WHERE User = 'bob'\G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: my_database
                 User: bob
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: N
            Drop_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
         Execute_priv: Y
           Event_priv: N
         Trigger_priv: N
Run Code Online (Sandbox Code Playgroud)

如果重要,这是一个在Ubuntu 12.04 LTS上运行的四节点MySQL集群.

编辑:我发现问题只发生在我尝试使用Zend AMF访问服务器时.任何有关PDO无法与Zend AMF合作的想法?我可能在Zend AMF设置中遗漏了一些东西吗?

Syn*_*ead 5

请尝试'bob'@'127.0.0.1'.如果php通过127.0.0.1访问它,它将永远不会被称为'localhost',因为本地DNS解析没有发生,MySQL将拒绝访问它.