プロが教えるわが家の防犯対策術!

$search_query = "select SQL_CALC_FOUND_ROWS * from king";
$usersearch= mysql_real_escape_string($_GET['usersearch']);
$clean_search = str_replace('、', ' ',$clean_search);
$clean_search = str_replace(' ', ' ',$usersearch);
$search_words = explode(' ', $clean_search);
$final_search_words = array();
if (count($search_words) > 0) {
foreach ($search_words as $word) {
if (!empty($word)) {
$final_search_words[] = $word;
}
}
}

// Generate a WHERE clause using all of the search keywords
$where_list = array();
if (count($final_search_words) > 0) {
foreach($final_search_words as $word) {
$where_list[] = "syou LIKE '%$word%'";
}
}
$where_clause = implode(' AND ', $where_list);

// Add the keyword WHERE clause to the search query
if (!empty($where_clause)) {
$search_query .= " WHERE $where_clause";
}

$pid = intval($_GET['pid']);
if ($pid < 1) $pid = 1;
$limit_start_rows = ( $pid - 1 ) * 10;
$search_query .= " LIMIT {$limit_start_rows}, 10";

$result = mysql_query($search_query);

$num_rows_result = mysql_query("SELECT FOUND_ROWS()");
$num_rows = mysql_fetch_assoc($num_rows_result);
$num_rows = $num_rows['FOUND_ROWS()'];

if($num_rows== 0){
$message="該当データは見つかりませんでした。";
}
else $message=$num_rows ."件該当しました<br/>";
echo $message;
while($row = mysql_fetch_array($result)

2行目でGETした文字をmysql_real_escape_string()で囲っただけですが大丈夫でしょうか。。

A 回答 (2件)

ちなみにざっと書くとこんな感じですね


先頭と後尾を除く$usersearchに含まれる「半角スペース」か「全角読点(、)」
「半角カンマ(,)」を使ってセパレートする

なおWHEREは常に「WHERE 1」をつけるようにしてください
それにANDでつなげば無駄なフローをはぶけます

<?PHP

$sql = "SELECT * FROM king WHERE 1";
$usersearch= ",aaa b、ccc,ddd , , , eee ";
$pattern="/^[,、\s]+|[,、\s]+$/";
$usersearch = preg_replace($pattern,'',$usersearch);
$pattern="/[,、\s]+/";
$search_words = preg_split($pattern,$usersearch);
foreach ((array) $search_words as $word) {
$sql.=" AND syou LIKE '%".mysql_real_escape_string($word)."%'";
}

print $sql;
//LIMIT句は省略
?>

この回答への補足

詳しいありがとうございます。大変助かります。

補足日時:2011/12/22 17:36
    • good
    • 0

mysql_real_escape_stringするのはクエリに投入する直前が望ましいです。




余談ですが、LIKEの検索にANDでつないでますがそうなると
両方の条件に合致しないとヒットしませんがよろしいのですか?
またたとえば出現順なども有効にするのであればもう少し書き方がかわってきます。
    • good
    • 0

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