2011-12-15 84 views
0

我在PHP中有一個網站,它使用多個MySQL表格,並使用mysql_select_db函數在它們之間切換。PHP + MySQL多DB網站到帶有前綴的單個DB網站。

DB1 (table1, table2, table3) 
    DB2 (table1, table2) 

最後的託管不幸支持只有一個單一的數據庫。所以我想到了一個用自定義mysql_switch_prefix函數替換mysql_select_db函數的系統,該函數存儲一個字符串,該字符串將用作以下查詢中所有表名稱的前綴。

DB (DB1_table1, DB1_table2, DB1_table3, DB2_table1, DB2_table2) 

接下來,我將使用自定義的mysql_query函數替換用「db_prefix」變量前綴表名的所有表名。

SELECT * FROM `table1` -> SELECT * FROM `DB1_table1` 

有沒有一種方法(或正則表達式),以取代在SQL語句中的表名與變量前綴的表名?

+0

現在,如果只有MySQL具有'模式',而不僅僅是'數據庫',我建議將它們分別放在一個單獨的'schema'中。是否有某些原因,他們_有前綴(你有表名衝突)?表格應該重新命名(更具描述性或獨特性)?否則,我會說只是讓名稱保持不變,並省去麻煩。 –

+0

問題是你可以在很多地方和SQL查詢中使用表名,而不僅僅是在'from'之後。正則表達式可能會被構建,但它可能會錯過很多情況。 – fge

回答

1

您可以查詢表名並將它們放入PHP數組中。

$result = mysql_query("SHOW TABLES FROM [DB name]") 
while($tableNames = mysql_fetch_row($result)){...} 

然後創建一個循環,做這樣的事情:

mysql_query("RENAME TABLE" . $tableNames[$i] . "TO [prefix]" . tableNames[$i]); 

這裏是MySQL的documentation,對於 「重命名...」 查詢。