2013-06-24 33 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语句。始终将该子句封装在括号中可防止发生意外的逻辑。