Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[PHP] Подскажите как лучше проверить, существует ли таблица? |

19.02.2009, 14:00
|
|
Участник форума
Регистрация: 12.11.2006
Сообщений: 213
Провел на форуме: 347573
Репутация:
185
|
|
[PHP] Подскажите как лучше проверить, существует ли таблица?
У меня есть несколько вариантов и все вообщем-то работают, но какой корректнее и логичней???
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.
Может еще кто-то скажет как проверить???
|
|
|

19.02.2009, 14:08
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
PHP код:
<?php
Function chek($table) {
if($db == mysql_query("select count(*) from $table")) return true;
else return false;
}
if (check("Новости")) echo 'Таблица существует';
else echo 'Нет такой таблицы';
?>
Последний раз редактировалось Pashkela; 19.02.2009 в 14:13..
|
|
|

19.02.2009, 14:10
|
|
Участник форума
Регистрация: 12.11.2006
Сообщений: 213
Провел на форуме: 347573
Репутация:
185
|
|
Сообщение от Pashkela
PHP код:
if($db == mysql_query("select * from table")) return true;
else return false;
Это тоже самое что мой 1-й вариант...
-------------------------------------
Pashkela, Я спрашивал в сабже "Подскажите как ЛУЧШЕ проверить," и предложил варианты, в ответ хотел бы видеть либо вариант который я не написал либо номер варианта который вы считаете более корректным.
Последний раз редактировалось -=Static=-; 19.02.2009 в 14:17..
|
|
|

19.02.2009, 14:15
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
Последний раз редактировалось Pashkela; 19.02.2009 в 14:20..
|
|
|

19.02.2009, 14:21
|
|
Участник форума
Регистрация: 12.11.2006
Сообщений: 213
Провел на форуме: 347573
Репутация:
185
|
|
Сообщение от Pashkela
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
А я что написал в первом варианте??? О_о
|
|
|

19.02.2009, 14:24
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Ну в общем о чем спор, да, этот вариант самый правильный и корректный, на мой взгляд, конечно
|
|
|

19.02.2009, 14:30
|
|
Постоянный
Регистрация: 06.06.2007
Сообщений: 335
Провел на форуме: 1487377
Репутация:
392
|
|
Я бы вставил в скрипт измерение времени выполнения и посмотрел бы по времени какой самый быстрый, но так способ 2 кажется норм
|
|
|

19.02.2009, 15:44
|
|
Участник форума
Регистрация: 12.11.2006
Сообщений: 213
Провел на форуме: 347573
Репутация:
185
|
|
Сообщение от b3
Как бы по изощреннее написать ето называеться))
Оптимальный вариант. Часть кода из инстал файла:
PHP код:
mysql_query("CREATE TABLE IF NOT EXISTS `".$TABLENAME."` (
 Такой вариант не пойдет, надо именно проверку сделать... Логика такая:
ЕСЛИ (Таблица существует) -> Набираем выборку
ИНАЧЕ ничего не делаем
|
|
|

21.02.2009, 19:07
|
|
Участник форума
Регистрация: 12.11.2006
Сообщений: 213
Провел на форуме: 347573
Репутация:
185
|
|
Все?? Больше мнений нету??? о_О
|
|
|

21.02.2009, 20:32
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
Сообщение от -=Static=-
Все?? Больше мнений нету??? о_О
если мускул пятый и есть доступ к 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)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|