はい。
類似記事
今回の内容
タイトルのとおりではあるのだけど。
今回はidを格納したカラムで複数のidを放り込んで該当記事一覧を出す感じ。
<?php
if(empty($_GET['searchword'])){
$searchword = '';
}else{
$searchword = $_GET['searchword'];
$searchword = str_replace(" ", " ", $searchword);
$searchword = str_replace(" ", ", ", $searchword);
$where = "WHERE 【id用カラム名】 IN ({$words})";
$pdo = new PDO('mysql:host=****;dbname=****;','****','****',[ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);
$stmt = $pdo->prepare("SELECT * FROM 【table名】 {$where}");
$stmt->execute();
}
?>
<form action="search.php" method="get">
<input type="search" name="searchword" value="<?php echo $searchword; ?>">
<button type="submit"><span>検索</span></button>
</form>
<?php if(!empty($_GET['searchword'])){ ?>
<ul>
<?php
foreach ($stmt as $row) {
echo '<li> '.$row['value']. '</li>';
}
?>
</ul>
<?php } ?>
一番重要なのはこの形を作ること。
$pdo->prepare("SELECT * FROM *** WHERE *** IN (***, ***, ***)");
検索時の区切りはスペースでやってるとして、使用者が入れたのが全角か半角かが分からない。突っぱねるのは親切じゃないので、今回は全角スペースを半角スペースに置換して統一、コード用にカンマ区切りに変更。
検索ワードの格納は気をつけること。数字の場合はベタ打ちでいける。
$pdo->prepare("SELECT * FROM *** WHERE *** IN (000, 111, 222)");
文字列の場合とかはこう。というか、こっちを基本としたほうがいいかもね。
$pdo->prepare("SELECT * FROM *** WHERE *** IN ('山田', '加藤', '足立')");
クォーテーションマークで囲うための命令を噛ませましょう。
例えばこう。
$searchword = str_replace(" ", " ", $searchword);
$searchword = str_replace(" ", "', '", $searchword);
$searchword = "'".$searchword."'";
配列っぽく見えてるだけでただの文字列だから、まあ、こうなる。一旦配列に入れてしまってもいいような、でもなんか無駄な工程になるような。どうでしょうね。
コメント