2015-12-14 212 views
1

我在我的MySQL數據庫中有幾個表。他們有一個特定的命名約定,如。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。我怎樣才能避免這種情況?

任何人都可以幫我匹配確切的表名並找出它是否已經存在或沒有?

+1

爲什麼不籤全名,沒有通配符,不LIKE –

+0

可能這可以幫助你: http://stackoverflow.com/questions/9479056/table-exists-method-might-not-be-working-pr嚴重 –

+0

說真的,我怎麼沒有看到'%'。謝謝@Dagon – Fawzan

回答

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

+0

哦通配符。我覺得很愚蠢。 – Fawzan

+0

如果你不使用通配符你爲什麼還在使用LIKE? –

+0

@Dagon如何在不使用'LIKE'關鍵字的情況下編寫查詢。 – Fawzan

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