2012-01-25 74 views
32

可能重複:
MySQL check if a table exists without throwing an exception或檢查MySQL表存在不

我已經在我的項目創建來自不同表的SELECT查詢動態MySQL查詢生成器。
我需要檢查當前處理表是否存在。
想象一下,我的表格是table1,table2和table3。我的代碼是這樣的:

<?php 
for($i = 1 ; $i <= 3 ; $i++) { 
    $this_table = 'table'.$i; 
    $query = mysql_query("SELECT * FROM $this_table"); 
    // ... 
} 
?> 

我該怎麼做這個檢查(請告訴我最簡單的方法)。

+0

我相信[此帖](http://stackoverflow.com/questions/1525784/mysql-check-if-a-table-exists-without-throwing-an-exception)有回答 – bowlerae

+0

我不知道爲什麼這個問題必須有3票下來... –

+1

也許是因爲它是重複的。檢查我上面發佈的鏈接。 – bowlerae

回答

77

更新的mysqli版本:

if ($result = $mysqli->query("SHOW TABLES LIKE '".$table."'")) { 
    if($result->num_rows == 1) { 
     echo "Table exists"; 
    } 
} 
else { 
    echo "Table does not exist"; 
} 

原MySQL的版本:

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$table."'"))==1) 
    echo "Table exists"; 
else echo "Table does not exist"; 

PHP docs引用。

+4

請注意,對於具有大量表的數據庫而言,對information_schema(如SHOW TABLES)的查詢使用大量CPU,即使文件被緩存。對於最新的5.6.x. – sivann

+1

**對mysql_ *函數沒有更多的支持**,它們是[**官方棄用的**](https://wiki.php。net/rfc/mysql_deprecation),**不再維護**,並將在未來[**刪除**](http://php.net/manual/en/function.mysql-connect.php#warning) 。您應該使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)更新您的代碼,以確保您的項目未來的功能。 – TRiG

+0

這是在視圖表上工作嗎? –

1

使用此查詢,然後檢查結果。

$query = 'show tables like "test1"'; 
11

another post

$checktable = mysql_query("SHOW TABLES LIKE '$this_table'"); 
$table_exists = mysql_num_rows($checktable) > 0; 
+1

這是最好的解決方案 – bozdoz

+0

糾正我,如果我錯了(我真的問你,我不是一個數據庫專家,我真的想知道)但是不可能存在一個表,但有0行?這不檢查它是否存在並且至少有一行,而不是測試它是否存在?如果表不存在任何內容,那麼'$ checktable'的值是否會不同? –

+0

@JimboJonny @JimboJonny由於沒有人迴應,我會解決這個問題 - 查詢搜索表(這將運行一個查詢信息架構 - 值得谷歌),因此它返回的行將_be_表。因此,如果該表存在,它將顯示爲該查詢結果中的一行。表中的行數與此無關。 – Luke

2

兩者你可以試試這個

$query = mysql_query("SELECT * FROM $this_table") or die (mysql_error()); 

或本

$query = mysql_query("SELECT * FROM $this_table") or die ("Table does not exists!"); 

或本

$query = mysql_query("SELECT * FROM $this_table"); 

if(!$query) 
    echo "The ".$this_table." does not exists"; 

希望它有幫助!

+0

不錯!效果很好! – Bishop

3
$result = mysql_query("SHOW TABLES FROM $dbname"); 

while($row = mysql_fetch_row($result)) 
{ 
    $arr[] = $row[0]; 
} 

if(in_array($table,$arr)) 
{ 
    echo 'Table exists'; 
} 
9
$query = mysqli_query('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME IN ("table1","table2","table3") AND TABLE_SCHEMA="yourschema"'); 
$tablesExists = array(); 
while(null!==($row=mysqli_fetch_row($query))){ 
    $tablesExists[] = $row[0]; 
} 
+2

您可以用'TABLE_SCHEMA = database()'替換'TABLE_SCHEMA =「yourschema」'' –