MySQL检查一个表是否存在,而不会引发exception

什么是最好的方法来检查一个表是否存在于MySQL中(最好通过PHP中的PDO)而不会抛出exception。 我不想parsing“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我创build了以下function。 假设你有一个名为$ con的mysqli实例。

 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是干净的,甚至更好的使用参数化查询。

这是我在使用存储过程时更喜欢的解决scheme。 自定义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") ){ 

有了这个,我只是把其他条件推入或。 为了我的需要,我只需要死。 虽然你可以设置或其他的东西。 有些人可能更喜欢if / else if / else。 然后删除或然后提供if / else if / else。

由于“显示表格”在较大的数据库上可能会很慢,所以我推荐使用“DESCRIBE”,并检查结果是否为真

 $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框架

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

如果想要这样做的原因是条件表创build,那么“CREATE TABLE IF NOT EXISTS”似乎是理想的工作。 在我发现这个之前,我使用了上面的“DESCRIBE”方法。 更多信息: MySQL“CREATE TABLE IF NOT EXISTS” – >错误1050

为什么你很难理解?

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