2010-06-01 2 views
1

이 SQL 절을 확인하고있다 : Doctrine : "LIKE REPLACE"를 사용하여 쿼리를 만드는 방법?

SELECT * FROM `sf_guard_user` WHERE nombre_apellidos LIKE REPLACE('Mar Sanz',' ','%') 

가 지금은 교리에 대한이 쿼리를 작성하는 것을 시도하고있다. 나는이 시도 :

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%")', 
         $query->getRootAlias(), $fieldName), 
       'Mar Sanz')); 

을하지만 난이 오류를 얻을 :

Warning: sprintf() [function.sprintf]: Too few arguments 

어떤 생각을?

감사

하비

답변

3
A '%'가 두 배로해야

('%%')는 당신이 sprintf 또는 printf로 전송 패턴 문자열의 내부에 리터럴 %를 의미합니다 :

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%%")', 
         $query->getRootAlias(), $fieldName), 
       'Mar Sanz')); 

제안 : 데이터베이스 서버로 보내기 전에 코드 내에서 문자열 대체 기능을 실행하지 않는 이유는 무엇입니까?

$query->andWhere(
    sprintf(
     '%s.%s LIKE ?', 
     $query->getRootAlias(), 
     $fieldName 
    ), 
    preg_replace('/ /', '%', 'Mar Sanz') 
); 
+0

고마워요! 당신의 제안에 어떤 이점이 있습니까? – ziiweb

관련 문제