编辑:
$ 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应该这样做吗? :|这很奇怪,因为我在其他项目中使用相同的方法,它始终有效..
答案 0 :(得分:3)
注意:不引用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);