2016-03-14 113 views
0

我正在編寫一個PHP應用程序,需要在添加數據時創建新的數據庫。我想要一個很好很簡單的方式來指定創建的數據庫應該是什麼樣子的(例如,它們包含哪些表,這些表應該包含哪些索引,...),這是當前在MySql Workbench中的一個EER圖,然後我將它轉發到工程師上服務器。我不認爲很多PHP代碼中的CREATE語句「非常簡單」。由PHP應用程序中的某個事件觸發,我需要做一些操作,創建一個具有指定名稱的新數據庫,該名稱是模板數據庫的副本。MySQL根據模板數據庫創建數據庫

這是八九不離十這個問題的重複:
MySQL copy/duplicate database
但回答這個問題不適合我。
我不想使用mysqldump,因爲我無法承受在服務器上執行shell代碼的安全風險,因爲必須插入已創建的數據庫的名稱,這可能容易受到代碼注入的影響。還有this
我也不想用SHOW語句拆分數據庫,而是手動執行CREATE語句將新數據庫拼接在一起,因爲這樣會變得很麻煩,並且可能無法捕獲模板數據庫的所有方面,因此很難引入發現錯誤。我也不確定當引用表在引用表之前被創建時,這個方法如何處理外鍵。

理想情況下,我想使用一個簡單的SQL語句,如CREATE DATABASE ? LIKE TemplateDatabase(其中?代表某種形式的準備語句中的數據庫名稱)。不幸的是,儘管在MySQL中似乎沒有這種功能。
顯然PostgreSQL可以做到這一點很好,但我不想僅僅因爲一個特性而遷移。

如何在滿足上述約束的情況下完成這項工作?

+0

'CREATE DATABASE?'你不能綁定表/列,句號。使用安全列表。 –

+0

@ Fred-ii-請說明你的意思是「安全列表」 –

回答

0

如果您的項目是新的,通過正確管理遷移,您可以分離哪個部分適用於表格數據的表格模式。複製數據庫只是重新運行遷移。

如果您的項目存在。您可以創建sql文件,並編寫php腳本以手動運行它。

+0

我理解你是否應該使用MySQL的遷移功能?如何觸發從PHP遷移以及如何配置遷移以實現預期效果? 我想避免使用SQL文件,因爲我的問題中陳述的原因。 –

+0

填補這個問題應該是一個漫長的故事。但你可以忍耐。創建一個自定義控制檯控制器,通過調用'shell_exec('您的命令運行')觸發遷移可能發生,配置遷移,因爲您希望的效果應該在該控制檯控制器內進行控制。 – ThangTD