2015-10-16 55 views
1

我有,顯然,一個簡單的問題。作爲一個文檔,我可以檢查DataBase上是否存在TABLE或VIEWS。在我的應用程序,我需要檢查,如果兩個已經存在數據庫返回自定義錯誤。問題是我可以檢查是否有TABLE,但不是VIEWS。例如:PHP SQLITE PDO檢查是否存在視圖OR表

**Working case** 
$checkTable = $this->db->query("SELECT * FROM sqlite_master WHERE name ='$table' and type='table'", PDO::FETCH_ASSOC); 

**Not working case** 
$checkTable = $this->db->query("SELECT * FROM sqlite_master WHERE name ='$table' and type='table' OR type='views'", PDO::FETCH_ASSOC); 

**Not working case** 
$checkTable = $this->db->query("SELECT * FROM sqlite_master WHERE name ='$table' and type='views'", PDO::FETCH_ASSOC); 

奇怪的是,如果我運行的意見的查詢,這將返回結果:

**Working case** 
$checkTable = $this->db->query("SELECT * FROM VIEWSpeople WHERE name ='$person'", PDO::FETCH_ASSOC); 

通用查詢上SQLITE_MASTER找到的觀點:

**Working case** 
$checkTable = $this->db->query("SELECT * FROM sqlite_master WHERE name ='$table'", PDO::FETCH_ASSOC); 

問題:爲什麼查詢無法將視圖識別爲type ='views'? 感謝您的時間。

+0

豈不是隻是'view'而不是'views'? – RamRaider

+0

嗨RRAider,謝謝你,我也試過「查看」沒什麼好 – sundsx

回答

0

視圖的類型不是views而是view

此外,你應該使用圓括號以確保表達式正確的順序進行評估:

... WHERE name ='$table' AND (type='table' OR type='view') 

另外,使用IN:

... WHERE name ='$table' AND type IN ('table', 'view') 
+0

嗨CL,謝謝你的幫助。但是: $ checkTable = $ this-> db-> query(「SELECT * FROM sqlite_master WHERE name ='$ table'AND type('table','view')」,PDO :: FETCH_ASSOC); 沒有結果。和 $ checkTable = $ this-> db-> query(「SELECT * FROM sqlite_master WHERE name ='$ table'AND(type ='table'OR type ='view')」,PDO :: FETCH_ASSOC); 沒有結果。任何想法? – sundsx