2016-06-21 2 views
0

안녕하세요 Doctrine DBAL 쿼리 작성기 (ORM 없음)와 SQLite에서 PHP Silex를 사용하고 있습니다. 그것은 일종의 작품, 그래서 내가 쿼리를 구축 할 수 있고 결과를 다시 spits,하지만 난 내 인생에 대한 설정 매개 변수를 얻을 수 없다 (나는 항상 빈 배열을 얻을). 여기 Doctrine DBAL 매개 변수가 작동하지 않습니다.

작동 무엇 : 나는 대체하고자하는 분명한 이유를 들어

$qb->select('*') 
      ->from('photos') 
      ->where("country = '".$country."'") 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 

그와 :

$qb->select('*') 
      ->from('photos') 
      ->where("country = ?") /// <-- 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(0, $country) /// <-- 

또는 :

$qb->select('*') 
      ->from('photos') 
      ->where("country = :country") /// <-- 
      ->andWhere('status = 1') 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(':country', $country) /// <-- 

심지어 :

$qb = $this->db->createQueryBuilder(); 
$expr = $qb->expr(); 
$qb->select('*') 
      ->from('photos') 
      ->where($qb->expr()->andX(
       $qb->expr()->eq('country', '?1'), /// <-- 
       $qb->expr()->eq('status', 1) 
      )) 
      ->orderBy($sort[0], $sort[1]) 
      ->setFirstResult($start) 
      ->setMaxResults($limit) 
      ->setParameter(1, $country) /// <-- 

다음은 docs에서 찾은 매개 변수 설정의 예입니다. 그러나 그 중 아무 것도 작동하지 않는 것으로 보이며 디버깅 방법을 모르겠습니다. $ qb-> getSQL() 및 $ qb-> getParams()를 확인하는 것이 유용한 것은 아닙니다.

메신저 ("doctrine/dbal": "~2.2") 사용하는 것이 중요합니다.

+0

"작동하지 않는 것 같습니다"에 대해 자세히 설명해 주실 수 있습니까? 결과가 없습니다. – mickadoo

+0

정확히. 오류 없음. 빈 결과 배열. 첫 번째 방법은 예상대로 행을 반환합니다. 변경된 내용이 표시됩니다. – konrad

+0

'-> setParameter ('country', $ country)'(콜론 제외) – mickadoo

답변

0

나는 오랜 시간 전에 그것을 풀었고 물론 바보 같은 것으로 밝혀 졌기 때문에 우연히 내 자신의 질문에 돌아왔다. 문제는 쿼리를 올바르게 작성하는 것이 아니라 올바른 방법으로 사용하는 것입니다. 다음은 나중에 참조 할 수있는 대답입니다.

쿼리 빌더를 사용하면하지 않는다 : 오히려

$this->db->fetchAll($qb->getSQL()); 
// you get query with unfilled placeholders 

하지만을 :하기 위해 노력하는 모든 사람에

$qb->execute()->fetchAll(); 

감사합니다!

관련 문제