操作
Backport(バックポート) #3331
完了Bug(バグ) #3273: activity/search.json?member_id=? で特定メンバーのアクティビティを取得すると500エラーとなる
activity/search.json?member_id=? で特定メンバーのアクティビティを取得すると500エラーとなる
開始日:
2012-12-06
期日:
進捗率:
100%
予定工数:
説明
現象¶
MySQL を使用している SNS で、API を使用して http://sns.example.com/api.php/activity/search.json?member_id=1 のように特定メンバーのアクティビティを取得しようとすると Internal Server Error が返ってしまう場合がある。
原因¶
opActivityQueryBuilder::buildMemberQuery() 内で andWhereIn メソッドを使用している。ここで生成されるクエリはサブクエリとして使用されるため #3135 で報告されているように不正なクエリが生成されてしまう。
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;
}
修正内容¶
opActivityQueryBuilder::buildMemberQuery() メソッドに #3135 の問題を回避する修正を施す
操作