2010-02-27 200 views
2

我有一個網站需要在安裝時手動創建數據庫表。目前他們被保存(連同任何初始數據)在一個.sql文件集合中。在不使用exec的情況下運行MySQL查詢列表()

我試着用CLI自動創建使用exec()MySQL,雖然它在幾個平臺上工作,但它是相當flaky,我不喜歡這樣做,再加上它很難調試錯誤和遠非防彈(特別是如果MySQL可執行文件不在系統路徑中)。

有沒有更好的方法來做到這一點? MySQL query()命令只允許每個查詢使用一個sql語句(這是一個棘手的問題)。

MySQLi我聽說可能會解決這些問題中的一部分,但我對原始MySQL庫進行了相當大的投入,但願意進行切換,只要它是穩定的,兼容的,並且通常在標準服務器版本上受支持,一般。

如果失敗了,我可能會願意從PHP數組/數據結構中進行某種創建 - 這可以說是更乾淨,因爲它可以更新表以便與現場模式匹配。我認爲這可能是一個已經解決的問題,因此任何使用pro/con的示例實現的鏈接都將非常有用!

在此先感謝您的任何見解。

回答

1

Apparently你當connecting to the datebase允許多個查詢時,可以通過65536作爲客戶端標誌,例如在一個SQL字符串中使用;

您也可以只讀取SQL文件的內容,如果有必要,可以通過;進行爆炸,然後在事務內部運行查詢以確保所有查詢都正確執行。

另一種選擇是看看Phingdbdeploy to manage databases

+0

我會研究這些鏈接。至於爆炸,它會窒息,如果其中一個插入使用; legitimatley和我認爲檢測什麼時候會太亂想不到。 – Meep3D 2010-02-27 13:33:38

0

您可以通過標準的mysql_ * PHP函數運行模式創建/更新命令。如果你調用query()命令只允許一條語句,只需多次調用它即可。

我真的不明白爲什麼你需要一切都在同一個電話。

您應該檢查每個語句後錯誤,如果它不能採取補救措施(除非你正使用InnoDB,在這種情況下,你可以包裝在一個事務中的所有語句,如果失敗回滾。)

+0

問題是,它是從那些可能包含多個命令.sql文件生成後使用LOAD DATA INFILE語法(http://dev.mysql.com/doc/refman/5.1/en/load-data.html) - 創建初始表,然後插入由phpmyadmin創建的行。至於多次運行mysql_query(),它只會多次運行文件中的第一個命令,除非我以編程方式分割文件,並且不知道該代碼會是什麼樣子。 – Meep3D 2010-02-27 13:28:36

+0

請參閱:http://stackoverflow.com/questions/147821/loading-sql-files-from-within-php – 2010-02-27 13:33:51

相關問題