2012-01-25 44 views
32

可能重复:
MySQL check if a table exists without throwing an exception或检查MySQL表存在不

我已经在我的项目创建来自不同表的SELECT查询动态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

这是在视图表上工作吗? –

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 @JimboJonny由于没有人回应,我会解决这个问题 - 查询搜索表(这将运行一个查询信息架构 - 值得谷歌),因此它返回的行将_be_表。因此,如果该表存在,它将显示为该查询结果中的一行。表中的行数与此无关。 – 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

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 = database()'替换'TABLE_SCHEMA =“yourschema”'' –