[PHP] Подскажите как лучше проверить, существует ли таблица?

Discussion in 'PHP' started by -=Static=-, 19 Feb 2009.

  1. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    У меня есть несколько вариантов и все вообщем-то работают, но какой корректнее и логичней???

    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.

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

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?php

    Function chek($table) {
    if(
    $db == mysql_query("select count(*) from $table")) return true;
    else return 
    false;
    }

    if (
    check("Новости")) echo 'Таблица существует';
    else echo 
    'Нет такой таблицы';

    ?>
     
    #2 Pashkela, 19 Feb 2009
    Last edited: 19 Feb 2009
  3. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Это тоже самое что мой 1-й вариант...

    -------------------------------------

    Pashkela, Я спрашивал в сабже "Подскажите как ЛУЧШЕ проверить," и предложил варианты, в ответ хотел бы видеть либо вариант который я не написал либо номер варианта который вы считаете более корректным.
     
    #3 -=Static=-, 19 Feb 2009
    Last edited: 19 Feb 2009
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ну я переделал децл, ну в общем это самас точная проверка, через count полей, т.к. таблица может быть, но полей может не быть, так что если она есть и вернет ноль = значит все-равно она есть, а обычный селект не поможет точно узнать. Плюс mysql_error тут нафинг не вплелся. Именно по этому мой вариант отличается от твоего и является корректным
     
    #4 Pashkela, 19 Feb 2009
    Last edited: 19 Feb 2009
  5. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    А я что написал в первом варианте??? О_о
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну в общем о чем спор, да, этот вариант самый правильный и корректный, на мой взгляд, конечно
     
  7. Zedi

    Zedi Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    316
    Likes Received:
    120
    Reputations:
    13
    Я бы вставил в скрипт измерение времени выполнения и посмотрел бы по времени какой самый быстрый, но так способ 2 кажется норм
     
  8. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    :) Такой вариант не пойдет, надо именно проверку сделать... Логика такая:

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

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Все?? Больше мнений нету??? о_О
     
  10. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    582
    Reputations:
    256
    если мускул пятый и есть доступ к 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)
    
     
    1 person likes this.
  11. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Самым оптимальным способом оказался:
    PHP:
    // Проверка существования таблицы $TableName в БД
    function mysql_table_exists($TableName) {
        if(!
    mysql_query("SELECT COUNT(*) FROM `$TableName`")) return false;
        return 
    true;
    }