MySQL проверяет, существует ли таблица без исключения - PullRequest
121 голосов
/ 06 октября 2009

Каков наилучший способ проверить, существует ли таблица в MySQL (предпочтительно через PDO в PHP), не вызывая исключения. Мне не хочется разбирать результаты "SHOW TABLES LIKE" и так далее. Должен быть какой-то логический запрос?

Ответы [ 10 ]

198 голосов
/ 06 октября 2009

Я не знаю синтаксис PDO для него, но это кажется довольно простым:

$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
39 голосов
/ 06 октября 2009

Если вы используете MySQL 5.0 и более поздние версии, вы можете попробовать:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';

Любые результаты указывают, что таблица существует.

От: http://www.electrictoolbox.com/check-if-mysql-table-exists/

8 голосов
/ 19 октября 2012

Используя mysqli, я создал следующую функцию. Предполагается, что у вас есть экземпляр mysqli с именем $ con.

function table_exist($table){
    global $con;
    $table = $con->real_escape_string($table);
    $sql = "show tables like '".$table."'";
    $res = $con->query($sql);
    return ($res->num_rows > 0);
}

Надеюсь, это поможет.

Предупреждение: как сказано в @jcaron, эта функция может быть уязвима для атак sqlinjection, поэтому убедитесь, что ваш $table var чистый или даже лучше использует параметризованные запросы.

3 голосов
/ 19 ноября 2013

Это сообщение публикуется просто, если кто-то заходит на этот вопрос Хотя его ответили немного. Некоторые ответы делают его более сложным, чем нужно.

Для MySQL * я использовал:

if (mysqli_num_rows(
    mysqli_query(
                    $con,"SHOW TABLES LIKE '" . $table . "'")
                ) > 0
        or die ("No table set")
    ){

В PDO я использовал:

if ($con->query(
                   "SHOW TABLES LIKE '" . $table . "'"
               )->rowCount() > 0
        or die("No table set")
   ){

С этим я просто помещаю условие else в или. И для моих нужд мне просто нужно умереть. Хотя вы можете установить или другие вещи. Некоторые могут предпочесть if / else if / else. Который затем удалить или затем поставить, если / еще, если / еще.

3 голосов
/ 10 октября 2013

Вот мое решение, которое я предпочитаю при использовании хранимых процедур. Пользовательская функция mysql для проверки таблицы существует в текущей базе данных.

delimiter $$

CREATE FUNCTION TABLE_EXISTS(_table_name VARCHAR(45))
RETURNS BOOLEAN
DETERMINISTIC READS SQL DATA
BEGIN
    DECLARE _exists  TINYINT(1) DEFAULT 0;

    SELECT COUNT(*) INTO _exists
    FROM information_schema.tables 
    WHERE table_schema =  DATABASE()
    AND table_name =  _table_name;

    RETURN _exists;

END$$

SELECT TABLE_EXISTS('you_table_name') as _exists
2 голосов
/ 24 июля 2015

Так как «Показать таблицы» может быть медленным в больших базах данных, я рекомендую использовать «DESCRIBE» и проверить, если вы получите true / false в результате

$tableExists = mysqli_query("DESCRIBE `myTable`");
0 голосов
/ 31 мая 2016

Если причиной этого является условное создание таблицы, тогда «CREATE TABLE IF NOT EXISTS» кажется идеальным для этой работы. Пока я не обнаружил это, я использовал метод «ОПИСАТЬ» выше. Более подробная информация здесь: MySQL "СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ" -> Ошибка 1050

0 голосов
/ 18 апреля 2016

Zend Framework

public function verifyTablesExists($tablesName)
    {
        $db = $this->getDefaultAdapter();
        $config_db = $db->getConfig();

        $sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{$config_db['dbname']}'  AND table_name = '{$tablesName}'";

        $result = $db->fetchRow($sql);
        return $result;

    }
0 голосов
/ 18 сентября 2013
$q = "SHOW TABLES";
$res = mysql_query($q, $con);
if ($res)
while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) )
{
    foreach( $row as $key => $value )
    {
        if ( $value = BTABLE )  // BTABLE IS A DEFINED NAME OF TABLE
            echo "exist";
        else
            echo "not exist";
    }
}
0 голосов
/ 24 октября 2012

Почему ты так усложняешь понимание?

function table_exist($table){ 
    $pTableExist = mysql_query("show tables like '".$table."'");
    if ($rTableExist = mysql_fetch_array($pTableExist)) {
        return "Yes";
    }else{
        return "No";
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...