字段名称'订单'与Zend_Db_table_Abstract与MySQL冲突?

不幸的是,我创建一个名为order字段名称表。字段名称'订单'与Zend_Db_table_Abstract与MySQL冲突?

有没有办法更改查询生成器来确保字段名在`(单引号的)包裹

我的查询如下:

   $select = $this->select(); 

$select->order('order DESC');

$select->where('order < ?', $row->menu_id);

$select->where('menu_id = ?', $row->menu_id);

建设者创造:

SELECT `menu_items`.* 

FROM `menu_items`

WHERE (order < '1')

AND (menu_id = '1')

ORDER BY `order` DESC LIMIT 1

我想它来创建

SELECT `menu_items`.* 

FROM `menu_items`

WHERE (`order` < '1')

AND (menu_id = '1')

ORDER BY `order` DESC LIMIT 1

感谢

回答:

我不是专家,但根据docs

没有引用应用于给予where()orWhere()方法表达式。如果您有需要引用的列名称,则必须使用quoteIdentifier()来为条件构成字符串。

有一节使用quoteIdentifier()的“添加表达式列”的例子:

$select = $db->select() 

->from(array('p' => 'products'),

array('origin' =>

'(p.' . $db->quoteIdentifier('from') . ' + 10)')

);

所以,你需要做这样的事情:

$db = Zend_Db_Table::getDefaultAdapter(); 

$select = $this->select();

$select->order('order DESC');

$select->where($db->quoteIdentifier('order') . ' < ?', $row->menu_id);

$select->where('menu_id = ?', $row->menu_id);

注意的是,在order()方法,

列名被引用为标识符,除非它们包含圆括号或是Zend_Db_Expr类型的对象。

所以你没有做什么特别的存在。

以上是 字段名称'订单'与Zend_Db_table_Abstract与MySQL冲突? 的全部内容, 来源链接: utcz.com/qa/260858.html

回到顶部