2014-11-04 145 views
0

如何在PHP ADOdb中檢查表是否存在一個獨立/未知的DB-System?ADOdb檢查表是否存在PHP

有幾種解決方案,特定於某些DB系統,但我需要一個PHP ADOdb的解決方案。

通過使用ADOdb中,我不能靠INFORMATION.SCHEMA之類,如:

SELECT * 
FROM information_schema.tables 
WHERE table_schema = 'db' 
AND table_name = 'tablename' 
LIMIT 1; 

,因爲他們是DB-特定一切,錯誤產生疑問也是不適用的,如:

SELECT 1 FROM 'testtable' LIMIT 1; 

因爲這會導致,至少在我的情況下,一個沉默的錯誤,但我無法預測其他DB系統上的行爲。

回答

0

我花了幾個小時找到一個工作解決方案。這裏$oADOdbCon是初始化一個「準備使用」連接到某些數據庫。

$rs = $oADOdbCon->execute("SHOW TABLES LIKE 'tablename';"); 

if ($rs->RecordCount() == 1) { 
    // do something 
} 

在某些情況下,它會派上用場一次檢查一組表的可用性,或者稍微延長SHOW TABLES functionallity檢查,這裏的通配符%來得心應手,所以從上述同樣的查詢可以被改寫到:

$rs = $oADOdbCon->execute("SHOW TABLES LIKE '%tablename%';"); 

在這種情況下,不僅表「表名」被發現,而且所有這名兄弟姐妹一樣「a_tablename」或「some_tablename_s」。因此,檢查有考慮到多個結果的可能性:

if ($rs->RecordCount() >= 1) { 
    // do something 
} 

,並顯示出發現的表:

while (!$rs->EOF) { 
    print $rs->fields[0] . '<BR>'; 
    $rs->MoveNext(); 
}