2017-10-30 1 views
0

Magento의 내 쿼리입니다.Zend Framework Magento Where 문이 오류를 반환합니다.

 $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 구문에 오류가 있습니다; 'LIKE \'% REMAX GRAY % \ '또는 at_name.value LIKE \'% REMAX % \ '또는 at_name.value LIKE \'4 번 줄 근처에서 사용할 올바른 구문을 보려면 MariaDB 서버 버전에 해당하는 설명서를 확인하십시오.

이것은 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%\'') 

하고 \는 정상적으로 실행됩니다. Like

젠드 프레임 워크는 백 슬래시와 '백 슬래시'를 수행하므로 제거 할 수 없습니다. 이걸 내가 어떻게 처리 할까?

감사합니다.

+0

저는 zend-framework에 익숙하지 않지만 바인딩을 수행하는 방법이 아닙니다. 각 값에 대해 자리 표시자가 필요합니다. '? '는 1 값이고 인용된다. 이렇게하면 SQL 문이 문자열이됩니다. 'at_name.value =?'를했다면 오류가 발생하지 않을 것이지만 reults를 얻지는 못할 것입니다. – chris85

답변

1

추가 '및 이스케이프 처리가() 메소드에 의해 추가되었습니다. 그러나 두 번째 매개 변수는 선택적이므로 다음과 같이 statement를 condition 매개 변수에 추가하면됩니다.

$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. 여전히 관리 표에서 토큰 화 된 검색으로 어지럽습니까? :) 나는 이것을 마음에서 빨리 코딩했다. 이것을 구현하는 훨씬 더 우아한 방법이 있습니다. check Zend_Db_Select 클래스의 where() 및 _where() 메소드를 확인하십시오.

+0

예. 이번에도 문제가 있습니다. –

+0

;) 내 대답이 도움이 되었다면 투표를 받아 들여야한다는 것을 잊지 마십시오. –

+0

어떻게하면 $ this ..... :) –

관련 문제