这是我在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);
如果我运行此查询,它将返回错误
#1064 - 您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在第 4 行的"LIKE \'%REMAX GREY%\' 或 at_name.value LIKE \'%REMAX%\' 或 at_name.value LIKE \' 附近使用的正确语法
这是 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%'')
错误在某处
(at_name.value 'LIKE
'%REMAX GREY%' OR at_name.value LIKE '%REMAX%' OR at_name.value LIKE
'%GREY%'')
如果我删除''
和它将正常运行。这样
(at_name.value LIKE
'%REMAX GREY%' OR at_name.value LIKE '%REMAX%' OR at_name.value LIKE
'%GREY%')
我无法摆脱它,因为 zend 框架是执行"和反斜杠的框架。我该如何处理?
谢谢。
通过方法 where() 添加了额外的 '' 和转义。但是第二个参数是可选的,因此只需将收集的where语句附加到条件参数中,如下所示:
$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. 还在管理网格中搞乱标记化搜索吗? :)我很快就把这个编码放在脑海里。还有更优雅的方法来实现这一点。检查类 Zend_Db_Select 中的 where() 和 _where() 方法