操作
Bug(バグ) #3344
未完了opActivityQueryBuilder で特定のメソッドで配列を引き数に渡した場合にエラーが発生する
開始日:
2013-05-07
期日:
進捗率:
0%
予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)
説明
概要¶
opActivityQueryBuilder で特定のメソッドで配列を引き数に渡した場合にエラーが発生する.
例えば下記のようなコードが考えられる. setViewerId() または includeMEmber() で配列を渡す場合となる.下記コードは両方共配列を指定している.
$builder = opActivityQueryBuilder::create(); $builder->setViewerId(array('1', '2')); $builder->includeMember(array('1', '2')); $builder->buildQuery()->execute();
エラー
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
この引き数の指定が想定されているかどうかは考慮していないため,この使い方が正しくない場合はコメントでその旨を示すか,コードから引き数が想定できる実装に変更することが望ましい.
原因¶
下記のように buildMemberQuery() の第二引数の $memberId は配列であることが許容されているように記述されているが,実際にここに配列を追加できるパターンでは 211 行目の $viewerId および $id が配列である必要があり,ここで配列を渡した場合にエラーが発生する.
lib/util/opActivityQueryBuilder.class.php 175 protected function buildMemberQuery($query, $memberId = null, $publicFlag = ActivityDataTable::PUBLIC_FLAG_SNS) 176 { 177 if (is_array($memberId)) 178 { 179 $query->andWhereIn('a.member_id', $memberId); 180 }
lib/util/opActivityQueryBuilder.class.php 211 $relation = Doctrine::getTable('MemberRelationship')->retrieveByFromAndTo($this->viewerId, $id);
操作