如何检查PHP ADOdb中的表是否存在于独立/未知的DB系统?
有一些解决方案,特定于某些DB系统,但我需要一个解决PHP ADOdb的解决方案。
通过使用ADOdb,我不能依赖于INFORMATION.SCHEMA等,如:
SELECT *
FROM information_schema.tables
WHERE table_schema = 'db'
AND table_name = 'tablename'
LIMIT 1;
因为它们都是特定于数据库的,导致错误的查询也不适用,例如:
SELECT 1 FROM 'testtable' LIMIT 1;
因为这会导致(至少在我的情况下)出现无提示错误,但我无法预测其他数据库系统上的行为。
答案 0 :(得分:0)
我花了几个小时找到一个有效的解决方案。这里$oADOdbCon
是一个初始化的“准备使用”连接到某个数据库。
$rs = $oADOdbCon->execute("SHOW TABLES LIKE 'tablename';");
if ($rs->RecordCount() == 1) {
// do something
}
在某些情况下,一次性检查一组表的可用性,或者可能是稍微扩展的SHOW TABLES
功能检查会很方便,这里通配符操作符%
很方便,所以同样如此上面的查询可以改为:
$rs = $oADOdbCon->execute("SHOW TABLES LIKE '%tablename%';");
在这种情况下,不仅找到了表'tablename',还找到了它的所有名称兄弟,如'a_tablename'或'some_tablename_s'。因此,检查考虑了多种结果的可能性:
if ($rs->RecordCount() >= 1) {
// do something
}
显示找到的表格:
while (!$rs->EOF) {
print $rs->fields[0] . '<BR>';
$rs->MoveNext();
}