2014-11-14 2 views
0

나는 다음과 같은 방법을 사용하는 쿼리의 결과를 얻으려면 :이스케이프 변수는 전 세계적으로

$의 DQL 변수는 단순히 DQL 쿼리 문자열입니다
$result = $this->getEntityManager()->createQuery($dql)->getResult(); 

. 쿼리 문자열 이스케이프되지 않기 때문에 실제로는 단지 입력에 Foo's 문자열을 입력됩니다

SELECT * FROM users WHERE login = 'Foo's' 

이 나에게 심포니 오류가 있습니다 : 문제는 내가 예를 들어, 쿼리 문자열의 변수에 아포스트로피를 추가 할 때이다.

이 문제를 어떻게 해결할 수 있습니까?

내 프로젝트에는 많은 getResult() 메소드와 많은 쿼리가 있으므로 쿼리 작성의 개념을 완전히 바꾸고 싶지는 않습니다.

할 방법이 있습니까?

+0

'\'백 슬래시 문자로 작은 따옴표를 이스케이프 처리해야합니다. – vaso123

+0

그러나 사용자가 모든 작은 따옴표 앞에 백 슬래시를 앞에 붙이는 것은 기대할 수 없습니다. – khernik

+0

그리고 덧붙여서 addslashes()는 도움이되지 않습니다. "... '%"에서 에러를줍니다. addslashes ($ 문자열). "% '..." – khernik

답변

0

최상의 해결책 : 쿼리를 다음과 같이 다시 작성하십시오. bindVariables.
신인 솔루션 : onKernelRequest 이벤트를 만들고 Request 객체에
최악의 솔루션 모두를 수정 : $ _POST, $ _GET을 수정하고 app.php

P.S.에 전역의 요청을 다시 리포지터리 외부의 검색어가 없습니다.
http://www.slideshare.net/kriswallsmith/how-kris-writes-symfony-apps

관련 문제