2016-04-06 75 views
0

我正在使用一個PHP框架,它的數據庫模型類足夠聰明,可以在架構更改時自行升級。他們這樣做,部分,通過類似於下面的僞代碼檢查的列表會:我可以在PHP中獲取數據庫列的規範嗎?

I am version 4. 

function UpgradeVersion() 
{ 
    If the DB doesn't yet have a column "foo" in this table, 
     I'm version 1. Add the "foo" column. 
    If the DB doesn't yet have a column "bar" in this table, 
     I'm version 2. Add the "bar" column. 
    If the DB still has a deprecated "fargle" in this table, 
     I'm version 3. Rename "fargle" to "gargle". 
    I'm now up to version 4. 
} 

我已經打在我們的最新的循環障礙,因爲我們不得不做的事情之一是擴大在先前版本中創建的列的大小。因此,爲了讓模型正確升級,它不能僅僅根據檢查是否存在列來決定升級;它必須知道列的當前格式,並確定它是否仍然太短。

我已經瀏覽了PHP和PDO文檔,但還沒有找到非實驗性的,不被棄用的方式來可靠地獲取這些信息。我能想到的唯一方法就是嘗試插入比原始長度長的插入,但比新插入的要短,然後選擇結果;如果它被截斷,那麼該列太短,需要升級。不過,這看起來並不理想,所以我在這裏尋求更好的選擇。

+0

在MySQL中,你可以使用INFORMATION_SCHEMA。請參閱https://dev.mysql.com/doc/refman/5.0/en/information-schema.html – user498023

+1

'SHOW COLUMNS FROM table'也可能有幫助。 http://dev.mysql.com/doc/refman/5.7/en/show-columns.html – CollinD

回答

2

你可以使用MySQL statment DESCRIBE myTable;,這將給您提供有關每一列

+0

很確定'describe'是[SQL 92](http://www.contrib.andrew.cmu.edu/~ shadow/sql/sql1992.txt)標準。我不熟悉不支持它的RDBMS。 – ficuscr

+0

'DESCRIBE'是MySQL SHOW SHOW COLUMNS FROM的同義詞 – cmorrissey

+0

爲了編織我認爲DESCRIBE和EXPLAIN是同義詞。 MySQL參考指出:「DESCRIBE語句提供了類似於SHOW COLUMNS的信息。」 – ficuscr

相關問題