使用 PHP/PDO 检查数据库表是否存在
我想检查我使用PHP和PDO连接到的数据库中是否存在具有特定名称的表。
它必须在所有数据库后端上工作,如MySQL,SQLite等。
我想检查我使用PHP和PDO连接到的数据库中是否存在具有特定名称的表。
它必须在所有数据库后端上工作,如MySQL,SQLite等。
下面是一个完整的函数,用于检查表是否存在。
/**
* Check if a table exists in the current database.
*
* @param PDO $pdo PDO instance connected to a database.
* @param string $table Table to search for.
* @return bool TRUE if table exists, FALSE if no table found.
*/
function tableExists($pdo, $table) {
// Try a select statement against the table
// Run it in try-catch in case PDO is in ERRMODE_EXCEPTION.
try {
$result = $pdo->query("SELECT 1 FROM {$table} LIMIT 1");
} catch (Exception $e) {
// We got an exception (table not found)
return FALSE;
}
// Result is either boolean FALSE (no table found) or PDOStatement Object (table found)
return $result !== FALSE;
}
注意:PDO只会在被告知时引发异常,默认情况下它是静默的,不会引发任何异常。这就是为什么我们也需要检查结果。请参阅 php.net 的 PDO 错误处理
在我继续之前,我确实意识到这是一个特定于MySQL的解决方案。
虽然这里提到的所有解决方案都可能有效,但我(个人)喜欢防止PDO抛出异常(个人偏好,仅此而已)。
因此,我使用以下内容来测试表的创建:
SHOW TABLES LIKE 'some_table_of_mine';
如果表不存在,则不会生成任何错误状态,您只需获得零结果集即可。为我快速、始终如一地工作。