该答案已根据OP提供的新信息进行了多次编辑
实际上是 rootallowed从您要连接的主机连接到服务器?如果错误字符串返回服务器的规范名称,则 'localhost' 很可能没有指向 127.0.0.1 :
“用户访问被拒绝
'root'@'MY.SERVER.HOST.NAME' 到
数据库“数据库名称”
这应该回显类似“用户'root'@localhost'的访问被拒绝”之类的内容,而不是服务器的名称。
Try:
$con = mysql_connect("127.0.0.1","root","pass");
Edit(在评论中提供更多信息后)
如果您从完全不同的主机连接,则必须告诉 MySQLuser@remote_hostname_or_ip
允许连接,并具有创建数据库和用户的适当权限。
您可以使用 phpmyadmin(在 MySQL 服务器上)或类似以下的查询轻松地完成此操作:
CREATE USER 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
我建议不要将此用户命名为“root”,只需创建一个具有所需的所有全局权限的用户。在示例中,我使用了 192.168.1.1,它很容易成为主机名,只需确保正确设置 DNS 即可。指定要匹配的主机exactly当您连接到远程服务器时,它会显示在日志中。
您可能还想根据口味调整限制。更多信息请参阅CREATE USER
语法可以是在这里找到 http://dev.mysql.com/doc/refman/5.1/en/create-user.html, GRANT
here http://dev.mysql.com/doc/refman/5.1/en/grant.html.
Edit
如果使用 MySQL 4 - CREATE 不是一个选项。你只需使用 GRANT (4.1 用户管理文档 http://dev.mysql.com/doc/refman/4.1/en/account-management-sql.html)
Edit
如果使用 C 面板,只需使用API http://forums.cpanel.net/f42/xml-api-php-class-version-1-0-a-136449.html。虽然是的,它确实有其怪癖,维护使用它的东西比临时解决方法更容易。许多成功的应用程序都毫无问题地使用它。与任何其他 API 一样,您在使用它时需要随时了解变化。