2010-05-05 268 views
3
轉換

我有我用它來創建一個數據庫,一個用戶,並授予用戶下面的PHP代碼:創建Shell腳本數據庫 - 從PHP

$con = mysql_connect("IP.ADDRESS","user","pass"); 
mysql_query("CREATE DATABASE ".$dbuser."",$con)or die(mysql_error()); 
mysql_query("grant all on ".$dbuser.".* to ".$dbname." identified by '".$dbpass."'",$con) or die(mysql_error()); 

我想執行這些行動但是來自一個shell腳本。難道僅僅是這樣的:

MyUSER="user" 
MyPASS="pass" 
MYSQL -u $MyUSER -h -p$MyPASS -Bse "CREATE DATABASE $dbuser;" 
MYSQL -u $MyUSER -h -p$MyPASS -Bse "GRANT ALL ON $DBUSER.* to $DBNAME identified by $DBPASS;" 

編輯,因爲這需要postwwwacct內(一個的cPanel後帳戶創建鉤子腳本)理想這將是完全獨立的

回答

6

您需要小寫「MYSQL」並在-h之後添加主機名,並且混合了單引號和雙引號。此外,您還需要爲dbnamedbuserdbpass設定值,並使用一致的大小寫:

MyUSER="user" 
MyPASS="pass" 
HostName="host" 
dbName="dbname" 
dbUser="dbuser" 
dbPass="dbpass" 

mysql -u $MyUSER -h $HostName -p$MyPASS -Bse "CREATE DATABASE $dbUser;" 
mysql -u $MyUSER -h $HostName -p$MyPASS -Bse "GRANT ALL ON ${dbUser}.* to $dbName identified by $dbPass;" 

但我不是在您的SQL語法100%的信心。我認爲它看起來更像這樣:

mysql -u $MyUSER -h $HostName -p$MyPASS -Bse "CREATE DATABASE $dbName;" 
mysql -u $MyUSER -h $HostName -p$MyPASS -Bse "GRANT ALL ON ${dbName}.* to $dbUser identified by $dbPass;" 
+0

當我在本地環境中創建一個一次性數據庫和用戶時,發現這很有用,只需要再添加一行: 'mysql -u $ MyUSER -p $ MyPASS -Bse「爲'$ 1'設置密碼@'$ 1' =密碼('$ 1');「'。我在這個答案中改變了另外兩條線,也就是'$ 1'的參數。當然,我在這裏爲一次性**本地**環境使用了一個參數。 **本地**。 – cdmo 2013-08-30 20:44:50

1

你的報價和資本是一個(或平臺偏見),但實質上是。

您可能想要考慮實際讓您的腳本創建一個sql腳本,然後使其通過php,shell(s!)等運行將會更容易。

+0

我第二次使用SQL腳本。看看一個dbdeploy和phing http://www.davedevelopment.co.uk/2008/04/14/how-to-simple-database-migrations-with-phing-and-dbdeploy/ – Gordon 2010-05-05 10:36:53

+0

理想情況下,我會保持它這一個腳本,它從postwwwacct(一個cpanel郵政帳戶創建腳本)運行如此理想,它將完全獨立 – robjmills 2010-05-05 10:47:18

+0

@Unreason可以讓我知道報價和上限在哪裏,所以我可以修復它們請 – robjmills 2010-05-05 12:05:24