PHP:mysql_connect()返回true但是mysql_select_db()返回false _在Ubuntu更新之后

时间:2013-10-21 17:46:41

标签: php mysql linux mysql-select-db

在php中将我的Ubuntu更新到13.10之后,mysql可以被任何用户连接但是无法选择具有正确用户的数据库并通过。 似乎发送到mysql的用户是空的而不是root。

$myconn = mysql_connect('localhost' , 'root' , 'pass');
$seldb = mysql_select_db('mydb' , $myconn);
$er = mysql_error();

跑完之后 $ mycon是:"resource id='2' type='mysql link'"

和 mysql_select_db()返回false;

$ er是:"Access denied for user ''@'localhost' to database 'mydb'"

请帮帮我。 抱歉我的英语不好。

2 个答案:

答案 0 :(得分:1)

您认为MySQL认为您是'',而不是root,即related to this warning from the manual

  

如果允许匿名用户连接到MySQL服务器,则还应该将所有本地用户的权限授予user_name @ localhost。否则,当命名用户尝试从本地计算机登录MySQL服务器时,将使用mysql.user表(在MySQL安装期间创建)中localhost的匿名用户帐户。有关详细信息,请参见第6.2.4节“访问Cotrol,第1阶段:连接验证”。

“Access Cotrol, Stage 1: Connection Verification”州:

  

服务器使用排序规则来排序具有最特定主机值的行

这意味着如果你有一个匿名的''@localhost用户,但是一个不太具体的(或稍后排序的)root@'%'(或类似的东西)定义永远不会匹配,因为'anonymous'规则匹配。查看最后一个链接以获得更全面的解释。

这意味着你:

  • 明确授予对root@localhost的访问权限。
  • DROP USER ''@'localhost';(匿名用户)

高度推荐第二个:匿名用户应该不需要

答案 1 :(得分:0)

我自己解决这个问题。在php.ini文件中,sql.safe _mode已启用。 导致mysql_connect()始终以匿名Ubuntu用户身份连接。

php.ini文件中的

:      sql.safe_mode =关