Zend DB where子句错误

时间:2012-03-14 15:49:17

标签: mysql zend-framework zend-db

编辑:

$ query-> where('`value` =?',$ number); 这似乎完成了工作。我仍然不知道为什么它在正常情况下不起作用,但这是一个解决方法..仍在寻找正确的答案!


我正在尝试使用简单的查询数据库:

$number = 4;
$query = $this->select();
$query->where('value = ?', $number);
$row = $this->fetchRow($query);

但由于某种原因,我经常遇到这个错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   用于在'value = 4附近使用正确语法的MySQL服务器版本   在第1行限制1'

当我进行汇编以查看查询字符串时:

SELECT `mighty_table`.* FROM `mighty_table` WHERE (value = 4)

我的专栏名称未转义..

Zend DB应该这样做吗? :|这很奇怪,因为我在其他项目中使用相同的方法,它始终有效..

2 个答案:

答案 0 :(得分:3)

From zend manual

  

注意:不引用SQL表达式中的值和标识符   为了你。如果您有需要引用的值或标识符,则为您   这样做是有责任的。使用quote(),quoteInto()和   quoteIdentifier()数据库适配器的方法。

例如,您可以使用quoteInto:

$number = 4;
$query = $this->select();
$where = $this->getAdapter()->quoteInto('value = ?', $number);
$query->where($where);
$row = $this->fetchRow($query);

答案 1 :(得分:1)

“value”确实是MySQL中的保留字。因此,您需要使用后退标记来逃避它。

我希望这可行:

$fieldName = $this->getAdapter()->quoteIdentifier('value');
$query->where($fieldName = ?", $number);