2013-06-24 59 views
0

我有以下查詢:爲什麼Zend Framework在where子句中添加括號?

$tagCordQuery = $this->freqDb->select() 
        ->from("rr_amplifiers", "*") 
        ->join("amplifiers_coordinate", "amplifiers_coordinate.name = TRIM(TRAILING '0' FROM rr_amplifiers.name)", array()) 
        ->where("amplifiers_coordinate.name IN(?)", $apsName); 

其中$ apsName它是一個數組。

問題是,當這個數組只有一個元素查詢了這樣額外的括號:

SELECT `rr_amplifiers`.* FROM `rr_amplifiers` 
INNER JOIN `amplifiers_coordinate` ON amplifiers_coordinate.name = TRIM(TRAILING '0' FROM rr_amplifiers.name) WHERE (amplifiers_coordinate.name IN('xpto')) 

爲什麼這樣它的發生?

+0

公平的問題,但在這個例子中注意額外的括號,並不重要。 –

+0

是的,我注意到了,但是它的問題在括號裏有一些地方,因爲當數組有多個元素時不會發生這個錯誤 –

+0

我認爲這不是錯誤,你的查詢可以這樣工作 – Hackerman

回答

2

這是如果你做了這樣的事情:

->where("amplifiers_coordinate.name IN(?) OR something = 1", $apsName); 

(即包括在WHERE OR條件)。如果沒有括號,查詢就不會像您期望的那樣工作。

+0

這個解決方案不會對我不起作用,錯誤也是如此: 語法錯誤或訪問衝突:1064您的SQL語法錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'))'處使用正確的語法。 –

+0

您的問題沒有提及語法錯誤,我在您發佈的查詢中看不到一個語法錯誤。如果您將此查詢剪切並粘貼到phpMyAdmin(或您選擇的數據庫工具),它是否工作? –

+1

然而,如果'$ apsName'爲空,您會得到該錯誤 - 這可能是問題嗎? –

2

Zend Framework允許您添加多個where語句。始終將該子句封裝在括號中可防止發生意外的邏輯。