使用 PHP/PDO 检查数据库表是否存在

2022-08-30 14:46:57

我想检查我使用PHP和PDO连接到的数据库中是否存在具有特定名称的表。

它必须在所有数据库后端上工作,如MySQL,SQLite等。


答案 1

下面是一个完整的函数,用于检查表是否存在。

/**
 * 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 错误处理


答案 2

在我继续之前,我确实意识到这是一个特定于MySQL的解决方案。

虽然这里提到的所有解决方案都可能有效,但我(个人)喜欢防止PDO抛出异常(个人偏好,仅此而已)。

因此,我使用以下内容来测试表的创建:

SHOW TABLES LIKE 'some_table_of_mine';

如果表不存在,则不会生成任何错误状态,您只需获得零结果集即可。为我快速、始终如一地工作。


推荐