此答案已根据 OP 提供的新信息进行了多次编辑
root 是否真的允许从您要连接的主机连接到服务器?如果错误字符串返回服务器的规范名称,则很有可能 'localhost' 没有指向 127.0.0.1 :
"用户拒绝访问
'root'@'MY.SERVER.HOST.NAME' 到
数据库'dbname'"
这应该回显类似“用户'root'@localhost'的访问被拒绝”,而不是服务器的名称。
试试:
$con = mysql_connect("127.0.0.1","root","pass");
编辑(在 cmets 提供更多信息后)
如果你从一个完全不同的主机连接,你必须告诉 MySQL user@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 设置正确即可。当您连接到远程服务器时,指定主机以匹配完全,因为它出现在日志中。
您可能还想根据口味调整限制。有关CREATE USER 语法的更多信息可以是found here、GRANT here。
编辑
如果使用 MySQL 4 - CREATE 不是一个选项。您只需使用 GRANT (4.1 Docs On User Management)
编辑
如果使用 C-Panel,只需 use the API。虽然是的,但它确实有它的怪癖,它更容易维护使用它的东西,而不是临时工作。许多成功的应用程序都可以毫无问题地使用它。与任何其他 API 一样,您需要在使用它时随时掌握变化。