0

私は単純な MySQL ベースの検索スクリプトを持っています。以下の問題に関連する部分のみを投稿します。

$name = 'John Doe';
$query = 'SELECT username FROM members WHERE name LIKE %$name%';

さて、問題は、John Doeその特定の名前のユーザーを取得する代わりに検索すると、名前が付けられたすべてのユーザーが取得されJohnDoe面白いことに、それが一番上にさえないということです...つまり、以前にJohn Doe見つけることができたJohn xxxxそれ。

このタスクを達成するための高度な MySQL 属性はありますか?

4

4 に答える 4

2

変化する

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = 'SELECT username FROM members WHERE name LIKE "'.%$name%.'"';

また

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

に変更することに注意してください

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

トリックを行いません。

これは、一重引用符で囲まれた文字列が変数を解釈しないためです。

注: 二重引用符やヒアドキュメントの構文とは異なり、特殊文字の変数とエスケープ シーケンスは、単一引用符で囲まれた文字列内にある場合は展開されません。

ただし、二重引用符は使用できます。

二重引用符で囲まれた文字列の最も重要な機能は、変数名が展開されるという事実です。詳細については、文字列の解析を参照してください。

更新: これは、Memolition のおかげで大幅に編集され、意味が変更されました :)

于 2013-04-29T19:37:15.587 に答える
1

変化する

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

いいえ

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

luksch が言うように、二重引用符は $name 変数値の代わりに $name を出力するためです

'したがって、このように単一引用符で囲む必要があります'%name'

そのため、'一重引用符はstringsandに対して機能しますvariables

および"二重引用符は次の場合にのみ機能しますstrings

于 2013-04-29T19:40:02.767 に答える
0

比較として使用している文字列を一重引用符で囲む必要がありますLIKE

実際、クエリは一重引用符で囲んでいるため、実際にクエリを実行しているのは次のとおりです。

SELECT username FROM members WHERE name LIKE %$name%

リテラルで$name

次のようにクエリを記述します。

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";
于 2013-04-29T19:41:03.307 に答える
0

Full Text インデックス (MyISAM AFAIR のみ) と MATCH AGAINST 句も使用できます。また、類似度も表示されます。場合によっては非常に便利です。例: http://forum.kohanaframework.org/discussion/9182/mysql-full-text-searching-match-against/p1

于 2013-04-29T19:42:37.870 に答える