У меня есть несколько вариантов и все вообщем-то работают, но какой корректнее и логичней??? 1. PHP: function CheckTableExists ($TableName) { $query = "SELECT COUNT(*) FROM `$TableName`"; $db = mysql_query($query) or return false; return true; } Если функция вернет что-то, значит таблица есть, иначе нету 2. PHP: function CheckTableExists ($TableName) { $query = "SHOW TABLES LIKE '$TableName'"; $db = mysql_query($query) or die(mysql_error()); $c = mysql_num_rows($db); if(!$c) return false; return true; } 3. Использовать IF EXIST. Может еще кто-то скажет как проверить???
PHP: <?php Function chek($table) { if($db == mysql_query("select count(*) from $table")) return true; else return false; } if (check("Новости")) echo 'Таблица существует'; else echo 'Нет такой таблицы'; ?>
Это тоже самое что мой 1-й вариант... ------------------------------------- Pashkela, Я спрашивал в сабже "Подскажите как ЛУЧШЕ проверить," и предложил варианты, в ответ хотел бы видеть либо вариант который я не написал либо номер варианта который вы считаете более корректным.
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
Я бы вставил в скрипт измерение времени выполнения и посмотрел бы по времени какой самый быстрый, но так способ 2 кажется норм
Такой вариант не пойдет, надо именно проверку сделать... Логика такая: ЕСЛИ (Таблица существует) -> Набираем выборку ИНАЧЕ ничего не делаем
если мускул пятый и есть доступ к information_schema, почему бы к ней не обратиться: Code: mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | test | +----------------+ 1 row in set (0.00 sec) mysql> SELECT 1 FROM information_schema.TABLES WHERE `TABLE_NAME` LIKE 'test' and TABLE_SCHEMA LIKE database(); +---+ | 1 | +---+ | 1 | +---+ 1 row in set (0.01 sec) mysql> SELECT 1 FROM information_schema.TABLES WHERE `TABLE_NAME` LIKE 'test1' and TABLE_SCHEMA LIKE database(); Empty set (0.00 sec)
Самым оптимальным способом оказался: PHP: // Проверка существования таблицы $TableName в БД function mysql_table_exists($TableName) { if(!mysql_query("SELECT COUNT(*) FROM `$TableName`")) return false; return true; }