
データベースからPDOを使ってデータを抜き出したい!
そして「bindParam」で安全に検索しよう。そうしよう。
しかし、見事にハマりました。/(^o^)\
解決方法はこちら!
$pdo = new PDO('sqlite:users.db'); // DBを設定
// クエリ設定
$q = htmlspecialchars($_POST['q']); //クエリを入力
$q = str_replace(" ", " ", trim($q));
$words = explode(" ",$q);
// 解析
$tmp = [];
$tmp2 = [];
$wd = [];
$i = 0;
foreach($words as $word)
{
if(!empty($word))
{
$tmp[] = " content LIKE :word".$i." ";
$tmp2[] = " title LIKE :word".$i." ";
$wd[] = '%'.$word.'%';
$i++;
}
}
// SQL
if(count($tmp) > 0)
{
$sql = "SELECT * FROM article WHERE (".implode("AND",$tmp).") OR (".implode("AND",$tmp2).") ORDER BY count DESC";
$search_sql = $pdo->prepare($sql);
foreach($wd as $key => $word){
$search_sql->bindParam(':word'.$key, $word);
}
$search_sql->execute();
// while
while($Article = $search_sql->fetch(PDO::FETCH_ASSOC))
{
// 表示
}
}
これの重要な点は18行目の「%検索文字%」にしているところです。
$wd[] = '%'.$word.'%';
そうすれば簡単に解決可能でした!
