MySQL检查表是否已存在

时间:2015-12-14 04:41:31

标签: php mysql codeigniter

我的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的名称相匹配。我怎么能避免这种情况?

任何人都可以帮我匹配确切的表名并弄清楚它是否已经存在?

3 个答案:

答案 0 :(得分:4)

无需查询。只需运行此

$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";
}

答案 1 :(得分:0)

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

$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?

答案 2 :(得分:0)

$check_exists = mysql_query("SHOW TABLES LIKE '$name'");
$table_exists = mysql_num_rows($check_exists) > 0;
if ($table_exists) {
    echo 'table exists';
}