MySQL проверяет, существует ли таблица без исключения исключения

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

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

$result = mysql_query("SHOW TABLES LIKE 'myTable'"); $tableExists = mysql_num_rows($result) > 0; 

Если вы используете 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/

С помощью 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, эта функция может быть уязвима для attincs sqlinjection, поэтому убедитесь, что ваша $table var чиста или даже лучше использует параметризованные запросы.

Вот мое решение, которое я предпочитаю при использовании хранимых процедур. Пользовательская функция 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 

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

Для 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. Который затем следует удалить или затем поставить if / else if / else.

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

 $tableExists = mysqli_query("DESCRIBE `myTable`"); 
 $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"; } } 

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; } 

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

Почему вы так трудно понять?

 function table_exist($table){ $pTableExist = mysql_query("show tables like '".$table."'"); if ($rTableExist = mysql_fetch_array($pTableExist)) { return "Yes"; }else{ return "No"; } }