2012-01-25 4 views
32

Можно создать дубликат:
MySQL check if a table exists without throwing an exceptionПроверьте MySQL таблица существует или не

У меня динамический построитель запросов MySQL в моем проекте, который создает запросы на выборку из разных таблиц.
Мне нужно проверить, существует ли текущая таблица обработки или нет.
Представьте, что моими таблицами являются table1, table2 и table3. Мой код выглядит примерно так:

<?php 
for($i = 1 ; $i <= 3 ; $i++) { 
    $this_table = 'table'.$i; 
    $query = mysql_query("SELECT * FROM $this_table"); 
    // ... 
} 
?> 

Как это сделать (скажите, пожалуйста, самый простой способ).

+0

Я считаю, что [это сообщение] (http://stackoverflow.com/questions/1525784/mysql-check-if-a-table-exists-without-throwing-an-exception) имеет Ответ – bowlerae

+0

Я не знаю, почему этот вопрос должен иметь 3 голоса вниз ... –

+1

Возможно, потому, что он был дублирован. Проверьте ссылку, которую я разместил выше. – bowlerae

ответ

77

Обновлено MySQLi версия:

if ($result = $mysqli->query("SHOW TABLES LIKE '".$table."'")) { 
    if($result->num_rows == 1) { 
     echo "Table exists"; 
    } 
} 
else { 
    echo "Table does not exist"; 
} 

Оригинальная версия MySQL:

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$table."'"))==1) 
    echo "Table exists"; 
else echo "Table does not exist"; 

Реферировано из PHP docs.

+4

Обратите внимание, что запросы к information_schema (например, SHOW TABLES) для БД с большим количеством таблиц используют много CPU, даже если файлы кэшируются. Верно для последних 5.6.x. – sivann

+1

Существует ** больше поддержки ** для 'mysql_ *' функций, они [** официально устарели **] (https: //wiki.php.net/rfc/mysql_deprecation), ** больше не поддерживается ** и будет [** удален **] (http://php.net/manual/en/function.mysql-connect.php#warning) в будущем , Вы должны обновить свой код с помощью [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/mysqli), чтобы обеспечить функциональность вашего проекта в будущем. – TRiG

+0

Работает ли эта таблица Views? –

1

Используйте этот запрос, а затем проверьте результаты.

$query = 'show tables like "test1"'; 
11

Взятые из another post

$checktable = mysql_query("SHOW TABLES LIKE '$this_table'"); 
$table_exists = mysql_num_rows($checktable) > 0; 
+1

Это лучшее решение – bozdoz

+0

Исправьте меня, если я ошибаюсь (я искренне прошу вас, я НЕ являюсь экспертом базы данных любыми способами , Мне действительно интересно), но не возможно ли, чтобы таблица существовала, но имела 0 строк? Разве это не проверяет, существует ли она И имеет хотя бы одну строку, в отличие от проверки, существует ли она? Будет ли значение '$ checktable' отличаться, если таблица вообще не существует или нет существующего без какого-либо контента? –

+0

@JimboJonny Так как никто не ответил, я обращусь к этому вопросу - запрос ищет таблицы (это будет запускать запрос против информационной схемы - стоит google), и таким образом строки, которые он возвращает, будут _be_ tables. Поэтому, если таблица существует, она будет отображаться в виде строки в результате этого запроса. Здесь количество строк в таблице не имеет значения. – Luke

2

Вы можете попробовать это

$query = mysql_query("SELECT * FROM $this_table") or die (mysql_error()); 

или это

$query = mysql_query("SELECT * FROM $this_table") or die ("Table does not exists!"); 

или это

$query = mysql_query("SELECT * FROM $this_table"); 

if(!$query) 
    echo "The ".$this_table." does not exists"; 

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

+0

Ницца !! Работает хорошо! – Bishop

0

MySQL путь:

SHOW TABLES LIKE 'pattern';

Там также осуждается PHP функция для перечисления всех таблиц БД, посмотрите на http://php.net/manual/en/function.mysql-list-tables.php

Checkout, ссылающихся, есть много полезного понимания на комментарии там.

3
$result = mysql_query("SHOW TABLES FROM $dbname"); 

while($row = mysql_fetch_row($result)) 
{ 
    $arr[] = $row[0]; 
} 

if(in_array($table,$arr)) 
{ 
    echo 'Table exists'; 
} 
9
$query = mysqli_query('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME IN ("table1","table2","table3") AND TABLE_SCHEMA="yourschema"'); 
$tablesExists = array(); 
while(null!==($row=mysqli_fetch_row($query))){ 
    $tablesExists[] = $row[0]; 
} 
+2

Вы можете заменить 'TABLE_SCHEMA =" yourschema "' на 'TABLE_SCHEMA = database()' –

Смежные вопросы