我有一個腳本,可以將表克隆到來自主SQL轉儲文件的唯一命名的MySQL數據庫。每個帳戶都有自己的數據庫,但所有帳戶的表結構都相同。我的解決方案是轉儲master數據庫表,然後通過PHP shell_exec,運行MySQL控制器cmd(mysql)以使用默認表填充新創建的數據庫。將可變數據從PHP傳遞到shell_exec命令
問題:只有當我在主SQL轉儲文件中對帳戶唯一數據庫名稱進行硬編碼時,該過程才起作用。
但是,主SQL文件中的「USE acct_dbID」行需要在運行時動態設置。
下面是代碼:
include('.dbase_credentials'); //constants for connection object
//using PHP built in connection class mysqli
$mysqli = new mysqli(DB_HOST,DB_UNAME,DB_UPWORD,DB_NAME);
if ($mysqli->connect_errno){
echo "Failed to open database connection: ".$mysqli->connect_error;
exit();
}
$dbID=$varNum; //variable, number ID generated earlier in the account setup process
//create database, doesnt return a resultset, no need for object var here
if ($mysqli->query("CREATE DATABASE acct_".$dbID) === TRUE){
//if dbase was created, clone the tables
$res = shell_exec('mysql -u dbaseUser --password=`cat /path/to/pass` -e "source /path/to/master_tables.sql" acct_'.$dbID);
//provide some UI feedback, shell_exec returns null on failure
if ($res!=null){
echo "The tables were cloned!";
}else{
echo "The cloning process failed!";
}
}else{
echo "no database created.";
}
如此反覆,master_tables.sql需要可變數據通過它在運行時,因此「USE acct_dbID」可以具體到每個新帳戶。
任何想法表示讚賞。 rwhite35
那麼,你從哪裏得到這個acct_dbId? – thatidiotguy
形成一個較早的過程。該過程在帳戶的主數據庫中設置帳戶ID。 dbID是一個以acct_開頭的數字。 – rwhite35
好吧,您爲什麼不查詢account_ids的這個master數據庫並遍歷它們,爲每個表創建這個表? – thatidiotguy