Как проверить, что таблица существует в PHP ADOdb для независимой / неизвестной БД-системы?
Есть несколько решений, специфичных для некоторой 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;
потому что это может вызвать, по крайней мере, в моем случае, тихую ошибку, но я не могу предсказать поведение на других DB-системах.
Мне понадобилось несколько часов, чтобы найти рабочее решение. Вот $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();
}
Других решений пока нет …