检查MySQL表是否存在

44

可能是重复问题:
MySQL检查表是否存在而不抛出异常

我在项目中使用一个动态的mysql查询生成器,用于从不同的表中创建select查询。
我需要检查当前处理的表是否存在。
假设我的表是table1、table2和table3。我的代码大致如下:

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

我应该如何进行这个检查(请告诉我最简单的方式)。


我相信这篇帖子有答案。 - bowlerae
我不知道为什么这个问题必须有3个投票反对... - Mohammad Saberi
1
可能是因为它被复制了。请检查我上面发布的链接。 - bowlerae
7个回答

94

更新了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文档


4
注意,对于有大量表的数据库进行信息模式查询(如SHOW TABLES),即使文件已经被缓存,也会使用大量CPU。这在最新版本的5.6.x中仍然适用。 - sivann
2
mysql_*函数已经不再受支持,它们已经正式弃用不再维护,并将在未来被移除。为确保项目的功能性,您应该使用PDOMySQLi更新您的代码。 - TRiG
1
@ßiansorÅ.Ålmerol 这个问题的答案可以帮到您:https://dev59.com/YnE85IYBdhLWcg3wUB2z - afuzzyllama
@sivann 那什么是更好的选择?从表格中选择? - Vitor
@VitorGuerreiro 这里有个示例:http://pastebin.com/3gTm0mkF - sivann
显示剩余2条评论

12

摘自另一篇帖子

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

请纠正我如果我错了(我真的在问你,我绝不是任何意义上的数据库专家,我实际上很好奇),但是一个表格存在但没有行不是可能的吗?这个检查不是检查它是否存在并且至少有一行,而不是测试它是否存在吗?如果表格根本不存在与存在但没有内容,$checktable的值会不同吗? - Jimbo Jonny
1
@JimboJonny,既然没有人回答,那我来解释一下——这个查询是用来搜索表的(它将在信息模式中运行一个查询——值得谷歌一下),因此它返回的行将是表。因此,如果该表存在,则会在此查询结果的行中显示。表中的行数在这里是无关紧要的。 - Luke

10
$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() - Vincent Robert

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

2
请使用此查询,然后检查结果。
$query = 'show tables like "test1"';

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

希望这能有所帮助!

太好了!!运行良好! - incalite

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接