从PHP创建MySQL用户和数据库

5
有没有办法使用PHP创建一个新的MySQL数据库,新的MySQL用户并在新的数据库上为新用户授予权限? 编辑 - 应该指出这是从1个服务器运行到另一个服务器,因此Server A尝试在Server B上安装DB /用户。
我有以下代码:
$con = mysql_connect("REMOTE.IP.ADDRESS","root","pass");
mysql_query("CREATE DATABASE ".$db."",$con)or die(mysql_error());
mysql_query("GRANT ALL ON ".$db.".* to  ".$user." identified by '".$dbpass."'",$con) or die(mysql_error());

但是我在授权查询上遇到了错误:

"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'"
4个回答

4

根据提供的新信息,本答案已经进行了多次编辑

请问您连接到的主机是否允许root用户从该主机连接到服务器?如果错误字符串返回服务器的规范名称,那么'localhost'很可能没有指向127.0.0.1:

"Access denied for user 'root'@'MY.SERVER.HOST.NAME' to database 'dbname'"

应该显示类似于"Access denied for user 'root'@localhost'"而不是服务器的名称。

请尝试:

$con = mysql_connect("127.0.0.1","root","pass");

编辑(在评论中提供更多信息后)

如果您正在从完全不同的主机连接,则必须告诉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语法的更多信息可以在此处找到,在此处找到有关GRANT的更多信息。 编辑 如果使用MySQL 4 - CREATE不是一个选项。您只需使用GRANT(4.1 Docs On User Management) 编辑 如果使用C-Panel,只需使用API即可。虽然它确实有其怪癖,但使用它维护东西比临时解决方案更容易。许多成功的应用程序在没有问题的情况下使用它。像任何其他API一样,使用它时需要及时了解变化。

刚刚注意到,我上面复制了错误的代码。这个脚本实际上是在一个服务器上运行,并尝试在另一个服务器上安装数据库,因此它根本没有连接到本地主机。 - robjmills
如果用户存在问题,我已经将其删除并尝试使用您的代码重新创建,但是我遇到了语法错误? - robjmills
@snaken - C-Panel会自己记录。如果您正在使用C-Panel,只需使用API创建数据库并添加权限,这样会更容易。请参见http://forums.cpanel.net/f42/xml-api-php-class-version-1-0-a-136449.html。 - Tim Post
是的,我不得不这样做,因为 API 路由已经崩溃了,在之前它是正常工作的。现在一切都正常,但我担心 cPanel 在将来会引起问题。 - robjmills
@snaken - C-panel非常喜欢破坏事物 :) 但是,我有一些在野外使用API的应用程序,我没有遇到过太多问题。您正在创建数据库,分别为cpanelusername_databasename和cpanelusername_databaseusername,是吗? - Tim Post
显示剩余3条评论

0
我相信你需要创建一个连接(使用root用户)到一个已存在的数据库(比如mysql),然后运行创建查询。

0

在这个例子中,你看不到数据库连接的原因是显而易见的:假定你已经学会了任何数据库操作都需要先连接。

这就是书籍写作的方式:前面的课程内容在后面的课程中被省略了。否则每一章都会变得更长,你永远也无法完成这本书。

所以,是的,你需要首先使用mysql_connect()连接到数据库。

要创建用户,可以使用mysql GRANT query

虽然我从来没有从脚本中完成过这个操作,只是从shell中完成的。


-1

首先需要连接到 SQL Server:

$conn=@mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
    or die("Err:Conn");

然后查询将被执行。但是,许多共享主机服务器通过PHP禁用了数据库的创建。


最好移除@符号,并将die()替换为更可靠的内容。 - Your Common Sense

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接