プロジェクト

全般

プロフィール

Bug(バグ) #3052

完了

activity/community.json 実行時にDoctrineでエラーが発生する場合がある

Youichi Kimura さんが12年以上前に追加. 7年以上前に更新.

ステータス:
Won't fix(対応せず)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2012-05-10
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
No (いいえ)
3.8 で発生するか:
Unknown (未調査)

説明

現象

activity/community.json 呼び出し時に下記のようなエラーがhttpdのエラーログに出力されて500エラーとなる。

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

is_active: 0 のメンバー(仮登録中のメンバー)が1人以上いる場合に発生する。

原因

マイフレンドまで公開のアクティビティを取得するための条件の中で、is_active: 0 のメンバーを対象外とするためにサブクエリ内に member_id_to NOT IN ? を追加していたが、この形式の DQL を Doctrine が正しくパースできず、最終的にパラメーター数が一致しない SQL とパラメーターの組が生成されていたためにエラーとなっていた。

inactiveIds が空の場合は opDoctrineQuery::andWhereIn() により ->andWhere('0 = 1'); に書き換えられるため問題が発生しない。

修正内容

問題箇所のクエリでは Member モデルを必ず leftJoin しているため、opActivateListener により is_active のチェックが自動的に追加される。

このクエリにおいて is_active: 0 のメンバーを除外するには Member に対する絞り込みのみで十分であるため、マイフレンドまで公開のアクティビティを抽出する部分からは is_active: 0 を除外する条件を冗長と判断し削除した。


関連するチケット 2 (1件未完了1件完了)

関連している OpenPNE 3 - Backport(バックポート) #3081: activity/community.json 実行時にDoctrineでエラーが発生する場合があるFixed(完了)Rimpei Ogawa2012-05-10

操作
関連している OpenPNE 3 - Bug(バグ) #3135: サブクエリのWHERE節に「field IN ?」の形式のDQLがあると Invalid parameter number エラーが発生するNew(新規)2012-07-27

操作

他の形式にエクスポート: Atom PDF