Проверка ADOdb, если таблица существует Переполнение стека

Как проверить, что таблица существует в 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-системах.

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();
}
0

Другие решения

Других решений пока нет …