dポイントプレゼントキャンペーン実施中!

プルダウンメニューから前方一致、中間一致、後方一致、完全一致
を選んで検索したいのですが、
うまくいきません。

$mae_naka_ushiro=$_GET['mae_naka_ushiro'];



//日本語入力考慮し、全角スペースを半角にする
$text = str_replace(" ", " ", $text);

$text2="";
$text2 = str_replace(" ", " ", $text2);

$text2=mb_convert_case($text,MB_CASE_LOWER,"UTF-8");
//スペースで分解。
$keywords = preg_split('/[\s]+/', $text, -1, PREG_SPLIT_NO_EMPTY);

print("<br>検索位置:".$mae_naka_ushiro."<br>");

switch($mae_naka_ushiro){

case "mae":
$keywords='%'.$keywords;
print("前"."<br>".$keywords);

break;

case "naka":
$keywords='%'.$keywords.'%';
print("中"."<br>".$keywords);

break;

case "ushiro":
$keywords=$keywords.'%';
print("後"."<br>".$keywords);

break;

case "zen":
$keywords=$keywords;
print("完全"."<br>".$keywords);

break;

default:
$keywords='%'.$keywords.'%';
print("デフォルト"."<br>".$keywords);

break;

}

$where = " where 1";
foreach( $keywords as $word ){
$where .= " and $key2 LIKE '$word'";

}

$time=microtime();

include ('sql_connect.php');

$sql = mysql_query("select count(*) as MAX from song $where");

$row = mysql_fetch_row($sql);

A 回答 (1件)

$keywordsはpreg_splitの戻り値ですから「配列」ですよね?それなのに



>$keywords='%'.$keywords;

こういう書き方は無理でしょう。printしているから、ご自分でも「おかしい」のはわかっていると思います。"%Array"などとなっているのではありませんか?

書くとすれば下記のような感じでしょうか・・・

$where = '';
if (count($keywords) > 0) { // 要素数が0なら処理しない
$like = array();
switch($mae_naka_ushiro){
case "mae":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like %' . $keywords . ')'; }
break;
case "naka":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like %' . $keywords . '%)'; }
break;
case "ushiro":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' like ' . $keywords . '%)'; }
break;
case "zen":
foreach ($keywords as $val) { $like[] = '(' . $key2 . ' = ' . $keywords . ')'; }
break;
}
$where = ' where ' . implode('and', $like);
}

#まったくの未検証ですのであしからず
#typoなどがあるかもしれません(汗

なお、上記ソースではエスケープ(mysql_real_escape_string)は端折っています。端折った理由は「ネイティブなMySQL関数はそろそろ先がないので早めにPDOなどで書き直すべき」ということです。プリペアドステートメントを使えばエスケープを意識する必要はありませんので。
    • good
    • 0

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