RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作

[PHP]PDO、2つ以上の項目からLIKE検索

投稿日:

Book
データベースから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.'%';

そうすれば簡単に解決可能でした!

-Web制作

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Meisyo]練習試合にレーティング制を導入

練習試合にレーティング制を導入しました。 レートはメイン画面に下記のように表示されます。 平均レートは1000です。 レーティングの変動⊿Rは下記の式で表されます。 a(レートRa)がb(レートRb) …

(VPSでつくる) Python(Flask)でMariaDB(MySQL)へ接続できるアプリをもっと読みやすく改良してみよう

連載第十二回目です。 前回の記事で、Python3.6.8+FlaskでMariaDBに接続・データベースを編集するアプリを動作させる設定を行い、動作確認しました。 今回は、機能は前回と全く同じアプリ …

no image

PHP5.5から使える暗号化「password_hash」を「password_compact」を使って以前のバージョンで利用する

PHP最高の暗号化法としてPHP5.5から使える「password_hash」があります。 でもそれを、5.5未満のバージョンで使いたい! 特に私が使っている、さくらインターネットのサーバーはPHP …

Google Driveを使ってXAMPP+CakePHPのドキュメントルートを共有する in Windows

どこでも同じように作業がしたい。 デスクトップでも、ノートでも。 無論、サーバー(XAMPP)も同じように動かしたいな ・・・ということで、Google Driveを使って環境を構築していきます。 今 …

no image

PHPのコーディング規則、PSRを学ぶ(2)

PHPのコーディング規則、PSRを学ぶ(1)の続きです。 今回は基本中の基本、文字コードと改行コードを設定します。 自宅サーバーで試します。(自宅サーバーの作り方はこちら) そのための基本設定も行いま …