【问题标题】:MySQL check if table already existsMySQL 检查表是否已经存在
【发布时间】:2015-12-14 04:41:30
【问题描述】:

我的 MySQL 数据库中有几个表。它们有一定的命名约定,例如。

tbl_1_alpha
tbl_1_beta
tbl_1_alpha2
tbl_2_beta
tbl_3_alpha2

现在我想检查给定的表是否已经存在于数据库中。

例如。

  • $name = 'tbl_1_alpha' -> 存在
  • $name = 'tbl_1_alpha2' -> 存在
  • $name = 'tbl_1_alpha3' -> 不存在

为了得到结果,我使用了以下函数

 public function exists($name)
    {

        $query = "SHOW TABLES LIKE '$name%'";

        $result = $this->db->query($query);

        if ($result->num_rows() > 0) {
            return true;
        }
        return false;

    }

对于给定的$name = tbl_1_alpha,它返回true。但是当我删除表tbl_1_alpha 时,它仍然返回true,因为它的名称与tbl_1_alpha2 匹配。我怎样才能避免这种情况?

谁能帮我匹配确切的表名并确定它是否已经存在?

【问题讨论】:

标签: php mysql codeigniter


【解决方案1】:

无需查询。运行这个

$this->db->table_exists('customer');

Table Data


示例

$query = $this->db->table_exists('customer');
$count = count($query);

if (empty($count)) {
    echo "No Table Found";
}
elseif ($count == 1) {
    echo "Oopzz! There is table";
}
elseif ($count >1) {
    echo "Ohh !! There are many tables";
}

【讨论】:

    【解决方案2】:

    您应该从查询中删除通配符。 即

    $query = "SHOW TABLES LIKE '$name'";
    

    当然,这不是必需的。

    没有LIKE

    如果您不想使用 LIKE 子句,这很公平,这里是没有它的查询。它根据表是否存在返回10

    SELECT count((1)) as `ct`  FROM INFORMATION_SCHEMA.TABLES where table_schema ='database' and table_name='table';
    

    还有许多其他方法已经得到解答。在这里结帐:How can I check if a MySQL table exists with PHP?

    【讨论】:

    • 哦,通配符。我觉得很愚蠢。
    • 如果你不使用通配符,为什么还要使用 LIKE?
    • @Dagon 如何在没有LIKE 关键字的情况下编写查询。
    • @Dagon 因为我认为这是最简单的方法。但我已经更新了没有 LIKE 的答案。
    【解决方案3】:
    $check_exists = mysql_query("SHOW TABLES LIKE '$name'");
    $table_exists = mysql_num_rows($check_exists) > 0;
    if ($table_exists) {
        echo 'table exists';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-05-05
      相关资源
      最近更新 更多