プロが教える店舗&オフィスのセキュリティ対策術

※部分一致検索ができなくて困っています。

※Apache2.0.52 + MySQL 5.0.51a + PHP5.2.8の環境です。

" sprintf "を使った、下記コードで部分一致検索をするには、どのようにしたらい
いのか、どなたかご教授いただけないでしょうか。
--------------------------------------------------------------------------
$u_address = $_REQUEST['u_address'];// POSTで送られてきた値を受け取り変換。

検索fieldは、"u_address"です。
--------------------------------------------------------------------------
$query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);

※上記のコードだと、"完全一致"にて検索となります。(部分一致の検索にしたい)



下記のコードに変更して、見たのですがエラーにでダメでした。(WHERE以下を抜粋)

WHERE u_address = '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address = '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address = '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');

WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');


" sprintf "を使わず、下記のコードでは問題なく部分一致検索ができます。
--------------------------------------------------------------------------
$sql = "SELECT * FROM dive_free_tbl_ WHERE u_address LIKE'%東%'";
--------------------------------------------------------------------------


何方かご教授いただきたく、よろしくお願いします。

以上

A 回答 (2件)

すみません。

書き方が悪かったです。
>query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);
WHERE句の「=」を「LIKE]に変えてください。
「=」は完全一致、「LIKE」は部分一致の検索をします。

この回答への補足

※ご教授いただいたとおり、" = "を" LIKE "に変更した場合、エラー無く検索できました。
本当にありがとう御座います。

1)" = "を" LIKE "に変更。
2)「 $u_address 」を「"%$u_address%"」に変更。

これで、バッチリでした。本当にありがとう御座います。

今後もお世話になることがあるかと思いますが、よろしくお願いします。

本当にありがとう御座いました。

補足日時:2009/05/17 19:34
    • good
    • 0

こんにちわ


>$query = sprintf("SELECT * FROM dive_free_tbl_ WHERE u_address = '%s' ORDER BY serial DESC", $u_address);
↑「WHERE u_address = '%s' 」とWHERE句が「=」になっているからではないかと思われます。

この回答への補足

こんちには、回答を頂きありがとう御座います。
指摘いただいた、「=」を取っていろいろとやってみましたが、
「部分一致検索」は、どうにも実現できませんでした。

実行した内容は、質問の文章にも書きましたが、
WHERE u_address '%s' ORDER BY serial DESC", LIKE'%$u_address%');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'[%$u_address]%'');
WHERE u_address '%s' ORDER BY serial DESC", LIKE'{%$u_address}%'');
を実行してみました。(WHERE以降を抜粋)

エラーが表示されて、部分一致検索はできませんでした。

何か、いい方法がありましたらお願いいたします。

補足日時:2009/05/17 13:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!