Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP创建MySQL用户和数据库_Php_Database_Mysql - Fatal编程技术网

从PHP创建MySQL用户和数据库

从PHP创建MySQL用户和数据库,php,database,mysql,Php,Database,Mysql,有没有一种方法可以创建一个新的MySQL数据库,一个新的MySQL用户,并使用PHP为新用户授予新数据库的权限 编辑-应该指出,这是从一台服务器运行到另一台服务器,因此服务器A试图在服务器B上安装DB/用户 我有这个: $con = mysql_connect("REMOTE.IP.ADDRESS","root","pass"); mysql_query("CREATE DATABASE ".$db."",$con)or die(mysql_error()); mysql_query("GRAN

有没有一种方法可以创建一个新的MySQL数据库,一个新的MySQL用户,并使用PHP为新用户授予新数据库的权限

编辑-应该指出,这是从一台服务器运行到另一台服务器,因此服务器A试图在服务器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());
但我在grant查询中遇到一个错误:

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

我相信您必须(使用
root
用户)创建到现有数据库(如
mysql
)的连接,然后运行创建查询。

在本例中,您没有看到数据库连接,原因很明显:假设您已经了解到任何数据库操作都需要先连接。
这就是书的写作方式:上一课的内容在下一课中被省略。否则每一章都会大两倍,你永远也读不完这本书

因此,是的,您需要首先使用mysql\u connect()连接到数据库

要创建用户,可以使用mysql


虽然我从未从脚本中完成过,但仅从shell中完成

您需要先连接到sql server:

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

然后执行查询。许多共享托管服务器都禁止通过PHP创建数据库。

这个答案已经根据OP提供的新信息编辑了好几次。

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

“用户的访问被拒绝 “root”@“MY.SERVER.HOST.NAME”到 数据库“dbname”

这应该响应类似“拒绝用户'root'@localhost'的访问”,而不是服务器的名称

尝试:

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

如果你是从一个完全不同的主机连接,你必须告诉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设置正确即可。指定与连接到远程服务器时在日志中显示的主机完全匹配的主机

您可能还想根据口味调整限制。有关
创建用户
语法的更多信息,请参见,
GRANT

编辑

如果使用MySQL 4,那么创建不是一个选项。您只需要使用GRANT()

编辑


如果使用C面板,只需。是的,它确实有它的怪癖,它更容易维护使用它的东西,而不是临时工作。许多成功的应用程序都使用它而没有问题。与任何其他API一样,在使用它时,您需要随时了解更改。

最好删除@。用更可靠的东西替换die(),我刚才注意到,我把上面的代码复制错了。这个脚本实际上运行在一台服务器上,并试图在另一台服务器上安装数据库,因此它实际上并没有连接到本地主机。如果用户出现问题,我删除了该用户,并试图用您的代码重新创建该用户,但我得到了一个语法错误?刚才注意到该服务器运行的是MySQL 4,并且它似乎是创建的直到MySQL 5才添加user命令-GRANT命令可能也是如此?@snaken-GRANT存在于MySQL 4中,使用该语法的链接更新我的问题。创建用户显然只是MySQL5-无论如何,现在正在创建数据库和用户,但由于某些原因,cPanel未检测到用户对数据库具有权限
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 ;