2014-11-04 144 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(); 
}