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

新手上路,请多包涵

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

它必须适用于所有数据库后端,如 MySQL、SQLite 等。

原文由 Andre 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 810
2 个回答

做:

 select 1 from your_table

然后捕获错误。如果您没有收到任何错误,但结果集的一列包含“1”,则该表存在。

原文由 Milan Babuškov 发布,翻译遵循 CC BY-SA 2.5 许可协议

这是检查表是否存在的完整函数。

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

原文由 exstral 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏