检查MySQL表是否存在

Moh*_*eri 41 php mysql exists

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

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

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

我该如何检查(请告诉我最简单的方法).

afu*_*ama 90

更新了mysqli版本:

if ($result = $mysqli->query("SHOW TABLES LIKE '".$table."'")) {
    if($result->num_rows == 1) {
        echo "Table exists";
    }
}
else {
    echo "Table does not exist";
}
Run Code Online (Sandbox Code Playgroud)

原始mysql版本:

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$table."'"))==1) 
    echo "Table exists";
else echo "Table does not exist";
Run Code Online (Sandbox Code Playgroud)

参考PHP文档.

  • 请注意,对于包含大量表的DB,对information_schema(如SHOW TABLES)的查询会占用大量CPU,即使缓存了文件也是如此.适用于最新的5.6.x. (4认同)
  • 对于`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)更新代码,以确保将来的项目功能. (2认同)

bow*_*rae 12

取自另一篇文章

$checktable = mysql_query("SHOW TABLES LIKE '$this_table'");
$table_exists = mysql_num_rows($checktable) > 0;
Run Code Online (Sandbox Code Playgroud)


Tim*_*mur 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];
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以用`TABLE_SCHEMA = database()`替换`TABLE_SCHEMA ="yourschema"` (2认同)