Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [PHP] Подскажите как лучше проверить, существует ли таблица? (https://forum.antichat.xyz/showthread.php?t=106968)

-=Static=- 19.02.2009 14:00

[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.

Может еще кто-то скажет как проверить???

Pashkela 19.02.2009 14:08

PHP код:

<?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

Цитата:

Сообщение от Pashkela
PHP код:

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

Цитата:

Сообщение от Pashkela
ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным

А я что написал в первом варианте??? О_о

Pashkela 19.02.2009 14:24

Ну в общем о чем спор, да, этот вариант самый правильный и корректный, на мой взгляд, конечно

Zedi 19.02.2009 14:30

Я бы вставил в скрипт измерение времени выполнения и посмотрел бы по времени какой самый быстрый, но так способ 2 кажется норм

-=Static=- 19.02.2009 15:44

Цитата:

Сообщение от b3
Как бы по изощреннее написать ето называеться))

Оптимальный вариант. Часть кода из инстал файла:
PHP код:

mysql_query("CREATE TABLE IF NOT EXISTS `".$TABLENAME."` ( 


:) Такой вариант не пойдет, надо именно проверку сделать... Логика такая:

ЕСЛИ (Таблица существует) -> Набираем выборку
ИНАЧЕ ничего не делаем

-=Static=- 21.02.2009 19:07

Все?? Больше мнений нету??? о_О

oRb 21.02.2009 20:32

Цитата:

Сообщение от -=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)



Время: 13:03