Php MySQL检查表是否已经存在

Php MySQL检查表是否已经存在,php,mysql,codeigniter,Php,Mysql,Codeigniter,我的MySQL数据库中有两个表。它们有特定的命名约定,例如 tbl_1_alpha tbl_1_beta tbl_1_alpha2 tbl_2_beta tbl_3_alpha2 现在我想检查数据库中是否已经存在给定的表 例如 $name='tbl\u 1\u alpha'->存在 $name='tbl\u 1\u alpha2'->存在 $name='tbl\u 1\u alpha3'->不存在 为了得到结果,我使用了以下函数 public function exists($name)

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

tbl_1_alpha
tbl_1_beta
tbl_1_alpha2
tbl_2_beta
tbl_3_alpha2
现在我想检查数据库中是否已经存在给定的表

例如

  • $name='tbl\u 1\u alpha'
    ->存在
  • $name='tbl\u 1\u alpha2'
    ->存在
  • $name='tbl\u 1\u 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
匹配。我怎样才能避免呢


有人能帮我匹配准确的表名并找出它是否已经存在吗

您应该从查询中删除通配符。 i、 e

当然,考虑到这不是一个要求

没有

如果您不想使用LIKE子句,那么这是一个没有LIKE子句的查询。根据表是否存在,它返回
1
0

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

还有许多其他的方法已经得到了回答。在这里签出它们:

无需查询。运行这个

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


示例

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

为什么不检查全名,没有通配符,没有可能这可能会帮助你:说真的,我怎么没有看到
%
。谢谢@Dagonth这是命名约定吗?我很高兴我不是这件事的一部分。可能是通配符的复制品。我觉得自己好笨。如果你不使用通配符,你为什么还要使用LIKE?@Dagon没有
LIKE
关键字,我怎么能编写查询。@Dagon因为我认为这是最简单的方法。但我已经更新了答案,这样做没有喜欢。
$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";
}
$check_exists = mysql_query("SHOW TABLES LIKE '$name'");
$table_exists = mysql_num_rows($check_exists) > 0;
if ($table_exists) {
    echo 'table exists';
}