2013-11-09 51 views
0

這是我第一次在此論壇提出問題。當我嘗試通過PHP創建數據庫並設置用戶權限時,MySQL語法錯誤

我正在一個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

您需要用分號結尾的每個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; 
+0

我已經有半冒號 – CrikoC

+0

有一個後你的第一個失蹤GRANT語句 – doublesharp

+0

當我添加分號時,我收到錯誤消息表示查詢失敗 – CrikoC

相關問題