2014-09-12 2 views
0

CMS에 검색 기능이있어 사용자 입력이 두 개 이상 허용되고 페이지의 제목과 내용이 검색됩니다.Yii 쿼리 작성기 : for 루프 큐에 다중 bindValue가 실패합니까?

먼저 SQL을 연결 문자열로 만든 다음 createCommand()로 전달합니다.
그러나 나는 쿼리 빌더 스타일로의 확인에 실패, 그것은 메시지와 함께 실패했다 :
Invalid parameter number: number of bound variables does not match number of tokens.

내가 잘못 위치를 확인할 도움말을 확인하시기 바랍니다.



는 (SQL 문자열을 전달) 작업 코드 :

$sql = 'SELECT * '; 
    $sql .= 'FROM page'; 
    $sql .= 'WHERE ('; 
    $i = 1; 
    foreach ($keywords as $keyword) { 
     $sql .= 'title LIKE :keyword_'.$i; 
     $sql .= ' || '; 
     $sql .= 'content LIKE :keyword_'.$i; 
     if($i != count($keywords)){ 
      $sql .= ' || '; 
      $i ++; 
     } 
    } 
    $sql .= ');'; 

    $command = Yii::app()->db->createCommand($sql); 
    $i = 1; 
    foreach ($keywords as $keyword) { 
     $command->bindValue(':keyword_'.$i, "%$keyword%", PDO::PARAM_STR); 
     $i ++; 
    } 
    $result = $command->queryAll(); 
    return $result; 


이있는 실패 코드 (쿼리 빌더) :

$command = Yii::app()->db->createCommand() 
     ->select('*') 
     ->from('page'); 
     $i = 1; 
    foreach ($keywords as $keyword) { 
     $command 
      -> orWhere('title LIKE :keyword_'.$i) 
      -> orWhere('content LIKE :keyword_'.$i) 
      ->bindValue(':keyword_'.$i, "%$keyword%", PDO::PARAM_STR); 
      $i ++; 
    } 
    $result = $command->queryAll(); 
    return $result; 

답변

0

CDbComman : : orWhere() 매개 변수를 사용하여 매개 변수를 바인딩 할 수 있습니다.

,
foreach ($keywords as $keyword) { 
    $command 
     -> orWhere('title LIKE :keyword_'.$i, array(':keyword_'.$i => "%$keyword%")) 
     -> orWhere('content LIKE :keyword_'.$i, array(':keyword_'.$i => "%$keyword%")); 
    $i ++; 
} 

는 편집 :

http://www.yiiframework.com/doc/api/1.1/CDbCommand#orWhere-detail

도움 희망