MySQL检查表是否存在而不抛出异常

clo*_*ops 122 php mysql database pdo

什么是检查MySQL中是否存在表(最好是通过PHP中的PDO)而不抛出异常的最佳方法.我不想解析"SHOW TABLES LIKE"的结果等等.必须有某种布尔查询?

nic*_*ckf 199

我不知道它的PDO语法,但这看起来很简单:

$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
Run Code Online (Sandbox Code Playgroud)

  • PDO:$ tableExists = $ db-> query("SHOW TABLES LIKE'myTable'") - > rowCount()> 0; (53认同)
  • mysqli:if($ db-> query("SHOW TABLES LIKE'myTable'") - > num_rows == 0){//创建表} (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)更新代码,以确保将来的项目功能. (4认同)

Mic*_*odd 39

如果您使用的是MySQL 5.0及更高版本,可以尝试:

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';
Run Code Online (Sandbox Code Playgroud)

任何结果都表明该表存在.

来自:http://www.electrictoolbox.com/check-if-mysql-table-exists/

  • 没有安全风险 - 对information_schema数据库的查询仅显示已连接用户有权访问的表. (3认同)

Fal*_*alk 8

使用mysqli我创建了以下功能.假设你有一个名为$ 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);
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

警告:由于@jcaron消化了这个函数可能容易受到sqlinjection attacs的攻击,因此请确保你的$tablevar是干净的,甚至更好地使用参数化查询.