doulu2011 2017-10-30 12:52
浏览 48
已采纳

Zend Framework Magento Where语句返回错误

This is my Query in Magento.

        $where = "LIKE '%".$value."%'";
        foreach($tokens as $token) {
            $where .= " OR at_name.value LIKE '%$token%'";
        }

        $this->getCollection()->getSelect()
             ->joinInner(array('at_name' => 'mgmx_catalog_product_entity_text'), '(at_name.entity_id = at_visibility.entity_id)')
             ->where("at_name.value ?" ,$where);

If I run this Query, it will return an error

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''LIKE \'%REMAX GREY%\' OR at_name.value LIKE \'%REMAX%\' OR at_name.value LIKE \' at line 4

This is the query in Mysql.

SELECT COUNT(DISTINCT e.entity_id) 
FROM `mgmx_catalog_product_entity` AS `e`
INNER JOIN `mgmx_catalog_product_entity_int` AS `at_status` 
ON (`at_status`.`entity_id` = `e`.`entity_id`) AND 
(`at_status`.`attribute_id` = '96') AND (`at_status`.`store_id` = 0)
INNER JOIN `mgmx_catalog_product_entity_int` AS `at_visibility` 
ON (`at_visibility`.`entity_id` = `e`.`entity_id`) AND 
(`at_visibility`.`attribute_id` = '102') AND (`at_visibility`.`store_id` = 0)
INNER JOIN `mgmx_catalog_product_entity_text` AS `at_name` ON (at_name.entity_id = at_visibility.entity_id) WHERE (at_name.value 'LIKE 
\'%REMAX GREY%\' OR at_name.value LIKE \'%REMAX%\' OR at_name.value LIKE 
\'%GREY%\'')

The error is here somewhere

 (at_name.value 'LIKE 
\'%REMAX GREY%\' OR at_name.value LIKE \'%REMAX%\' OR at_name.value LIKE 
\'%GREY%\'')

If I remove the '' and the \ it will run normally. Like so

(at_name.value LIKE 
'%REMAX GREY%' OR at_name.value LIKE '%REMAX%' OR at_name.value LIKE 
'%GREY%')

I can't get rid of it as the zend framework is the one doing the '' and the backslashes. How do i deal with this?

Thanks.

  • 写回答

1条回答 默认 最新

  • dp152153 2017-10-30 13:27
    关注

    Additional '' and escaping were added by method where(). But the second parameter is optional so simply append collected where statement to condition parameter like this:

    $this->getCollection()->getSelect()
                 ->joinInner(array('at_name' => 'mgmx_catalog_product_entity_text'), '(at_name.entity_id = at_visibility.entity_id)')
                 ->where("at_name.value ".$where);
    

    PS. still messing around with tokenized search in admin grid? :) I coded this quickly out of mind. There are even more elegant ways to implement this. check where() and _where() methods in class Zend_Db_Select

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度