Просмотр полной версии : [PHP] Подскажите как лучше проверить, существует ли таблица?
-=Static=-
19.02.2009, 14:00
У меня есть несколько вариантов и все вообщем-то работают, но какой корректнее и логичней???
1.
function CheckTableExists ($TableName)
{
$query = "SELECT COUNT(*) FROM `$TableName`";
$db = mysql_query($query) or return false;
return true;
}
Если функция вернет что-то, значит таблица есть, иначе нету :)
2.
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.
Может еще кто-то скажет как проверить???
Pashkela
19.02.2009, 14:08
<?php
Function chek($table) {
if($db == mysql_query("select count(*) from $table")) return true;
else return false;
}
if (check("Новости")) echo 'Таблица существует';
else echo 'Нет такой таблицы';
?>
-=Static=-
19.02.2009, 14:10
if($db == mysql_query("select * from table")) return true;
else return false;
Это тоже самое что мой 1-й вариант...
-------------------------------------
Pashkela, Я спрашивал в сабже "Подскажите как ЛУЧШЕ проверить," и предложил варианты, в ответ хотел бы видеть либо вариант который я не написал либо номер варианта который вы считаете более корректным.
Pashkela
19.02.2009, 14:15
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
-=Static=-
19.02.2009, 14:21
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
А я что написал в первом варианте??? О_о
Pashkela
19.02.2009, 14:24
Ну в общем о чем спор, да, этот вариант самый правильный и корректный, на мой взгляд, конечно
Я бы вставил в скрипт измерение времени выполнения и посмотрел бы по времени какой самый быстрый, но так способ 2 кажется норм
-=Static=-
19.02.2009, 15:44
Как бы по изощреннее написать ето называеться))
Оптимальный вариант. Часть кода из инстал файла:
mysql_query("CREATE TABLE IF NOT EXISTS `".$TABLENAME."` (
:) Такой вариант не пойдет, надо именно проверку сделать... Логика такая:
ЕСЛИ (Таблица существует) -> Набираем выборку
ИНАЧЕ ничего не делаем
-=Static=-
21.02.2009, 19:07
Все?? Больше мнений нету??? о_О
Все?? Больше мнений нету??? о_О
если мускул пятый и есть доступ к information_schema, почему бы к ней не обратиться:
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)
-=Static=-
25.02.2009, 17:49
Самым оптимальным способом оказался:
// Проверка существования таблицы $TableName в БД
function mysql_table_exists($TableName) {
if(!mysql_query("SELECT COUNT(*) FROM `$TableName`")) return false;
return true;
}
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot