Задача
Вы хотите знать, существует ли таблица.
Решение
Используйте предложение SHOW TABLES, чтобы посмотреть, присутствует ли таблица в списке.
Обсуждение
Вы можете использовать предложение SHOW TABLES для проверки существования определенной таблицы, добавив инструкцию LIKE с именем таблицы:
SHOW TABLES LIKE ‘имя_таблицы’;
SHOW TABLES FROM имя_БД LIKE ‘имя_таблицы’;
Если строка возвращается, таблица существует. Если нет, то не существует.
Рассмотрим функцию на Perl, осуществляющую проверку наличия таблицы:
sub table_exists
<
my ($dbh, $tbl_name) = @_;
my $db_clause = "";
($db_clause, $tbl_name) = (" FROM $1", $2) if $tbl_name =
s/([%_])/\$1/g; # экранировать любые специальные символы
return ($dbh->selectrow_array ("SHOW TABLES $db_clause LIKE ‘$tbl_name’"));
>
Функция проверяет аргумент имени таблицы на соответствие формату имя_БД.имя_таблицы. Если формат такой, то функция извлекает имя таблицы и добавляет в предложение инструкцию FROM. В противном случае производится проверка для текущей базы данных.
Обратите внимание на то, что функция возвращает «ложь», если таблица существует, но у вас нет прав на доступ к ней.
Есть и другие способы проверки существования таблицы. Любое из приведенных ниже предложений SELECT выполнится успешно, если таблица существует, и не выполнится, если она не существует:
SELECT * FROM имя_таблицы WHERE 1=0;
SELECT COUNT(*) FROM имя_таблицы;
Чтобы использовать такие предложения в программе, сначала настройте режим диагностирования ошибок вашего API так, чтобы он не прерывалвыполнение программы в случае обнаружения ошибки. Затем попробуйте выполнить предложение и посмотреть, выполнится ли оно.
dr_z10
Новичок
Проверка существования таблицы в базе MySql
Подскажите, пожалуйста, каким образом можно проверить существование таблицы (в процессе выполнения PHP кода)?
К сожалению, ни на форуме, ни в мануале не нашёл ответа на свой вопрос.
Блин, промахнулся. Модеры, перенесите в PHP & Mускуль, plz!
Добрый День, Задача такова проверить наличие таблицы в базе данных максимально простым методом и не в коем случае не загружая процесс! Я гуглил но на форумах кроме как
ничего посоветовать толком не могут либо совсем уж огроменные конструкции в 10 строк, не ужели нету в php простой команды типа
если нет такого варианта то я воспользуюсь вещами с формов, зарание спасибо!
6 ответов 6
Выборка из таблицы может приводить к ошибочному срабатыванию, если таблица пустая.
Мой выбор — SHOW TABLES при обязательном использовании подготовки (prepare) запросов во избежание sql-инъекций, если исходное имя таблицы хранится в переменной. Псевдокод, возможны опечатки — не протестировал, лишь пишу логику.
То, что обычно подобные запросы занимают много строк, на мой взгляд, связано как раз-таки с проблемами, вызванными возможными sql-инъекциями. Если Вы не знаете что это такое, просто набейте в Google.