Project

General

Profile

Actions

Backport(バックポート) #2108

closed

部分一致検索を行う箇所でワイルドカード検索ができてしまう

Added by Minoru Takai over 13 years ago. Updated over 13 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2011-05-17
Due date:
% Done:

100%

Estimated time:

Description

Overview (現象)

メンバー画面の「メンバー検索」や「コミュニティ検索」、あるいは管理画面の「メンバー管理」などでは、ニックネームやキーワード等で部分一致検索が行える。ここで、アンダースコア("_")やパーセント("%")を含めて検索すると、文字としてではなくメタ文字(ワイルドカード)として検索が行なわれてしまう。

これは仕様と考えれば問題ではないと言えるが、この動作は意図した仕様ではなく、不具合として扱うべきであると考えられる。

Causes (原因)

LIKE検索を行っている箇所では

$query->addWhere('name LIKE ?', '%'.$value.'%');

のように(部分一致)検索文字列として入力された値を直接渡しているためメタ文字がそのままメタ文字として扱われてしまっている。

Way to fix (修正内容)

LIKE検索は関数化されていない(LIKEメソッドがあるわけではない)ため、LIKE文を用いている箇所全てで入力文字列中のメタ文字をエスケープするか、最終的にSQLが生成される時点でエスケープを施すという対応が考えられる。

opDoctrineQuery クラスに LIKE 検索用のメソッドを作成し、それを各所で使用するように書き換える。このチケットではコアのみを扱う。

なお、このチケットで「意図しないワイルドカード検索ができてしまう問題」を解消するのは MySQL を使っている場合とする(仮に他のDBで問題が解消されていなくても MySQL でさえ解消されていれば良いものとする)。

Note (補足)

バックスラッシュを含む文字列での検索についての挙動も気になる。例えば "foo\bar" というニックネームのメンバーがいる場合、メンバー検索で "foo" と検索すればヒットするが、 "foo\" と検索してもヒットせず、 "foo\\" と検索するとヒットするような動作を確認している。


Related issues 2 (0 open2 closed)

Related to OpenPNE 3 - Bug(バグ) #2106: 部分一致検索を行う箇所でワイルドカード検索ができてしまうFixed(完了)Hiroshi Kato2011-05-17

Actions
Related to OpenPNE 3 - Backport(バックポート) #2109: 部分一致検索を行う箇所でワイルドカード検索ができてしまうFixed(完了)Yuya Watanabe2011-05-172011-10-06

Actions
Actions

Also available in: Atom PDF