【发布时间】:2017-10-30 12:52:15
【问题描述】:
这是我在 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%\' OR at_name.value LIKE \'%REMAX%\' OR 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 框架是执行 '' 和反斜杠的框架。我该如何处理?
谢谢。
【问题讨论】:
-
我不熟悉zend-framework,但这不是绑定的方式。每个值都需要一个占位符。
?是 1 个值并被引用。这会导致您的 SQL 语句成为字符串。如果你做了at_name.value = ?,你不会得到错误,但你也不会得到结果。
标签: php mysql magento zend-framework