Project

General

Profile

Bug(バグ) #3273

Updated by Youichi Kimura about 12 years ago

h3. 現象 

 MySQLを使用しているSNSで、http://sns.example.com/api.php/activity/search.json?member_id=1 のように特定メンバーのアクティビティを取得しようとすると、取得するメンバーが「自分」「非フレンド」「ブロックされている」のいずれかである場合にInternal Server Errorが返ってしまう。(フレンドの場合はエラーは起きずに正常な値が返る) 

 h3. 原因 

 opActivityQueryBuilder::buildMemberQuery() 内で andWhereIn メソッドを使用している。ここで生成されるクエリはサブクエリとして使用されるため #3135 で報告されているように不正なクエリが生成されてしまう。 

 <pre><code class="php"> 
   protected function buildMemberQuery($query, $memberId = null, $publicFlag = ActivityDataTable::PUBLIC_FLAG_SNS) 
   { 
     if (is_array($memberId)) 
     {    
       $query->andWhereIn('a.member_id', $memberId); 
     }    
     elseif ($memberId instanceof Doctrine_Query) 
     {    
       $query->andWhere('a.member_id IN ('.$memberId->getDql().')'); 
     }    
     elseif (is_scalar($memberId)) 
     {    
       $query->andWhere('a.member_id = ?', $memberId); 
     }    

     $query->andWhereIn('a.public_flag', $this->table->getViewablePublicFlags($publicFlag)); 

     return $query; 
   } 
 </code></pre> 

 h3. 修正内容 

 opActivityQueryBuilder::buildMemberQuery() メソッドに #3135 #3155 の問題を回避する修正を施す

Back