当我尝试通过PHP创建数据库并设置用户权限时,MySQL语法出错

时间:2013-11-09 17:12:34

标签: php mysql database

这是我第一次在这个论坛上提问。

我正在开发一个php项目,我必须通过php-创建一个数据库并插入一些空表。

这里的问题是,当我尝试向超级用户添加权限时,我总是收到有关语法的错误消息(出于某种原因,如果我不这样做,则会显示一条错误消息,指出我没有权限访问数据库)。

以下是创建数据库和分配权限的代码:

$sql = "CREATE DATABASE IF NOT EXISTS `database` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; "; 

$sql .= "GRANT SELECT database.* TO 'superuser'@'localhost' ";

$sql .= "GRANT ALL ON database." TO 'superuser'@'localhost' IDENTIFIED BY 'password'; ";

$sql .= "FLUSH PRIVILEGES"; 
你能告诉我做错了什么吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用分号;结束每个SQL语句,在第一个GRANT之后它会丢失。第二个GRANT使用database."并且应该是database.*,也应该用反引号包围,因为“数据库”是一个保留字。也就是说,第一个GRANT可以省略,因为它将包含在GRANT ALL中。

$sql = "CREATE DATABASE IF NOT EXISTS `database` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; ";
$sql .= "GRANT ALL ON `database`.* TO 'superuser'@'localhost' IDENTIFIED BY 'password'; ";
$sql .= "FLUSH PRIVILEGES;"; 

您还可以使用HEREDOC格式,以便于阅读

$sql = <<<SQL
  CREATE DATABASE IF NOT EXISTS `database` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
  GRANT ALL ON `database`.* TO 'superuser'@'localhost' IDENTIFIED BY 'password';
  FLUSH PRIVILEGES; 
SQL;