PDO: определить количество таблиц в базе данных с помощью rowCount?

Я использую CMS, которая устанавливает некоторые таблицы, а затем, чтобы убедиться, что все установлено правильно, пытается подсчитать количество таблиц в базе данных. (Обратите внимание, что цель состоит в том, чтобы подсчитать сами таблицы, а не строки в таблицах)

Используемый запрос - "SHOW TABLES", результаты которого сохраняются в "$result". Вот так:

$link->query("SHOW TABLES")

Затем дальше по коду есть счетчик $result, например:

if ($result->rowCount() > 0) {
    $r = $result->fetchAll(PDO::FETCH_ASSOC);
}else{
    $r = false;
    return $r;
}

Когда я проверяю результат, я получаю 0. (В БД 14 таблиц) Является ли метод rowCount правильным для применения при использовании SHOW TABLES? Из того, что я прочитал, rowCount считает только затронутые строки. Поскольку SHOW TABLES ни на что не влияет, он ничего не засчитывает.

Верно ли мое предположение или тут что-то другое?


person Monk    schedule 31.01.2013    source источник
comment
Просто любопытно - ты еще не знаешь номер? Я не могу представить причину, чтобы получить его динамически.   -  person Your Common Sense    schedule 31.01.2013
comment
См. stackoverflow.com/questions/ 64894/ для получения списка таблиц с помощью обычного выбора.   -  person fvu    schedule 31.01.2013
comment
аналогично: stackoverflow.com/questions/11378375 /   -  person xQbert    schedule 31.01.2013
comment
Здравый смысл. Не уверен, это не моя кодовая база, я просто пытаюсь устранить неполадки. Я могу только предположить, что автору нужна гибкость для добавления большего количества таблиц в будущем по мере расширения CMS. Спасибо fvu и xQbert, эти ссылки выглядят многообещающе.   -  person Monk    schedule 31.01.2013
comment
Ваше предположение верно; его следует использовать для операторов обновления/удаления.   -  person Ja͢ck    schedule 31.01.2013


Ответы (2)


Пытаться

$count = $link->query('show tables')->fetch(PDO::FETCH_NUM);
person Mattt    schedule 31.01.2013

Другой способ с information_schema:

$sql = "
SELECT COUNT( * ) AS 'Tables'
FROM information_schema.TABLES
WHERE table_schema = 'YOUR_DB_NAME'
GROUP BY table_schema
";

$count = $link->query($sql)->fetchColumn();

Другой способ с SHOW TABLES:

$count = count($link->query("SHOW TABLES")->fetchAll());
person bitWorking    schedule 31.01.2013