Php 在尝试创建数据库之前检查用户权限

Php 在尝试创建数据库之前检查用户权限,php,mysql,Php,Mysql,有些宿主允许您的脚本创建数据库,有些则不允许,并要求您使用它们的控制面板。如何检查数据库是否允许我使用给定的用户/密码运行此查询,而不实际创建任何数据库 因为如果我没有足够的权限,我只想从UI中完全隐藏“创建数据库”按钮 我正在使用PHP和MySQL。谢谢。只需创建一个测试脚本 <?php mysql_connect(...); $result = mysql_query('CREATE DATABASE testDB'); if (!$result) { //Failed } e

有些宿主允许您的脚本创建数据库,有些则不允许,并要求您使用它们的控制面板。如何检查数据库是否允许我使用给定的用户/密码运行此查询,而不实际创建任何数据库

因为如果我没有足够的权限,我只想从UI中完全隐藏“创建数据库”按钮


我正在使用PHP和MySQL。谢谢。

只需创建一个测试脚本

<?php
mysql_connect(...);
$result = mysql_query('CREATE DATABASE testDB');
if (!$result)
{
    //Failed
}
else
{
    mysql_query('DROP DATABASE testDB');
}
mysql_close();
?>


您可以在IF中定义一个变量,然后将其写入配置文件。

您可以通过以下方式获得权限:

SHOW GRANTS FOR CURRENT_USER;

正如Vartec所说,
SHOW GRANTS FOR CURRENT_USER
是一条出路。我添加这个答案只是为了在您没有完全权限时显示该语句的输出:

GRANT USAGE ON *.* TO 'myusername'@'%' IDENTIFIED BY PASSWORD '*8D4A4D198E31D6EA9D7997F7B29A2BCA254178B6'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb1`.* TO 'myusername'@'%'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb2`.* TO 'myusername'@'%'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE ROUTINE ON `mydb3`.* TO 'myusername'@'%'

我正在编写一个安装程序,需要检查相同的东西,这也是我提出的最好的解决方案。我在表名的末尾添加了一个散列,这样就不太可能与现有表冲突。或者,您可以添加一个额外的检查,查看testDB是否已经存在,以防止破坏其他人的测试数据库(请注意第二个SQL命令中的输入错误)。添加一些随机字符串可能不是一个坏主意,如果你的代码将在其他人的服务器上使用。听起来很酷,谢谢。如何检查是否允许创建数据库?当前它返回:授予上的所有权限。使用GRANT选项连接到“根”@“本地主机”。它还可以是什么样子?要么是所有特权,要么是列表中定义的一个单独的特权列表。列表中有一行CREATE-Enable database和table creation。但我的任务是“捕捉”一种情况,即允许您创建表,但不允许创建数据库。我想,在这种情况下,CREATE将不会在上授予,而只在SomeDB.*上授予,对吗?再次感谢。看起来我必须在PHP中部分地重新实现MySQL查询解析器:-)您可以尝试直接从系统表(MySQL.user和MySQL.db)中进行选择。有一个列Create_priv。