【问题标题】:Check if MySQL table exists or not [duplicate]检查MySQL表是否存在[重复]
【发布时间】:2012-02-18 23:12:13
【问题描述】:

可能重复:
MySQL check if a table exists without throwing an exception

我的项目中有一个动态 mysql 查询构建器,它可以从不同的表中创建选择查询。
我需要检查当前处理表是否存在。
假设我的表是 table1、table2 和 table3。我的代码是这样的:

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

我该如何做这个检查(请告诉我最简单的方法)。

【问题讨论】:

  • 我相信this post有答案
  • 我不知道为什么这个问题必须有 3 票否决...
  • 可能是因为它被复制了。检查我在上面发布的链接。

标签: php mysql exists


【解决方案1】:

更新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

【讨论】:

  • 请注意,对具有大量表的 DB 的 information_schema(如 SHOW TABLES)查询会占用大量 CPU,即使文件已被缓存。适用于最新的 5.6.x。
  • mysql_* 函数不再支持,它们是 officially deprecated不再维护,并将在未来。您应该使用PDOMySQLi 更新您的代码,以确保您的项目在未来的功能。
  • 这适用于 Views 表吗?
  • @ßiansorÅ.Ålmerol 这个问题的答案可以帮助你stackoverflow.com/questions/2834016/…
  • @sivann 那么更好的选择是什么?从表中选择?
【解决方案2】:

取自another post

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

【讨论】:

  • 如果我错了,请纠正我(我真的要求你这样做,无论如何我都不是数据库专家,我真的很想知道)但是表不可能存在但有 0 行?这不是检查它是否存在并且至少有一行,而不是测试它是否存在?如果表根本不存在与没有任何内容存在,$checktable 的值会有所不同吗?
  • @JimboJonny 由于没有人回应我会解决这个问题 - 查询搜索表(这将针对信息模式运行查询 - 值得谷歌),因此它返回的行将成为表。因此,如果该表存在,它将在此查询的结果中显示为一行。表中的行数在这里无关紧要。
【解决方案3】:
$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];
}

【讨论】:

  • 您可以将TABLE_SCHEMA="yourschema" 替换为TABLE_SCHEMA=database()
【解决方案4】:
$result = mysql_query("SHOW TABLES FROM $dbname");

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

if(in_array($table,$arr))
{
  echo 'Table exists';
}

【讨论】:

    【解决方案5】:

    使用此查询,然后检查结果。

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

    【讨论】:

      【解决方案6】:

      你可以试试这个

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

      希望对你有帮助!

      【讨论】:

      • 很好!!效果很好!
      【解决方案7】:

      MySQL方式:

      SHOW TABLES LIKE 'pattern';

      还有一个已弃用的 PHP 函数用于列出所有 db 表,请查看 http://php.net/manual/en/function.mysql-list-tables.php

      查看那个链接,那里有很多关于 cmets 的有用见解。

      【讨论】:

        猜你喜欢
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-25
        • 2014-03-15
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        相关资源
        最近更新 更多