2015-02-09 15 views
5

Mam następujące zapytanie:Błąd zapytania Symfony: Oczekiwany dosłowne, dostał '"'

$query = $em->createQueryBuilder() 
      ->select('u.id,u.username,u.username_canonical,u.email,u.email_canonical,u.last_login,u.name,u.type,u.phone,u.site,u.agency,u.subtype,u.info,u.created_date,u.vip') 
      ->from('ContrateAdminBundle:Fosuser', 'u') 
         ->where('u.created_date BETWEEN "'.$fromdateaccounts.'" AND "'.$todateaccounts.'" ')      
      ->getQuery(); 
     $results = $query->getResult(); 

w Symfony, aby pobrać dane użytkownika, ale mam następujący błąd:

[Syntax Error] line 0, col 223: Error: Expected Literal, got '"' 
500 Internal Server Error - QueryException 
1 linked Exception: QueryException » 

a mój wynik zapytania

SELECT u.id,u.username,u.username_canonical,u.email,u.email_canonical,u.last_login,u.name,u.type,u.phone,u.site,u.agency,u.subtype,u.info,u.created_date,u.vip FROM ContrateAdminBundle:Fosuser u WHERE u.created_date BETWEEN "2014-08-04 13:29" AND "2014-10-30 13:29" 
+0

Czy spróbować z prostego cytatem zamiast podwójny cudzysłów? – ekans

Odpowiedz

4

literały łańcuchowe w SQL są oznaczone apostrofów (') nie cudzysłowy ("), więc:

$query = $em->createQueryBuilder() 
       ->select('u.id,u.username,u.username_canonical,u.email,u.email_canonical,u.last_login,u.name,u.type,u.phone,u.site,u.agency,u.subtype,u.info,u.created_date,u.vip') 
       ->from('ContrateAdminBundle:Fosuser', 'u') 
       ->where("u.created_date BETWEEN '${fromdateaccounts}' AND '{$todateaccounts}'")      
       ->getQuery(); 
+0

dziękuję bardzo to działało. Dziękuję bardzo – Prabhash

1

Można również użyć Expr:

$queryBuilder = $em->createQueryBuilder(); 

... 
->where($queryBuilder->expr()->between('u.created_date', $fromdateaccounts, $todateaccounts)); 
Powiązane problemy