見出し画像

HerokuとPHPでLineのDB接続されたチャットボットを作る4(検索・返信処理等)

前回:

1. 簡単なBotの作成(おうむ返し)
2. データベース接続(準備)
3.データベース接続(接続)
4. 検索・返信処理
5. 曖昧検索

前回でDBへの接続もできたので、次は実際の処理の方へ。

4を曖昧検索等の処理、5を返信処理としていたけど、書きながらなんか違うなって思ったので、4を検索・返信処理、5を曖昧検索に変更します。

ここら辺からLogを見ることも多くなるかと思うのでLogの見方を共有。

いきなり曖昧検索へ行くとあれなので、普通の検索からスタート。

DBへの検索対象のデータの登録

まずはデータの登録。

とりあえず必要なのは

1. ID
2. レストランの名前
3. 住所

の三つ。

テストデータを登録した時同様(新しくテーブルを作ってもいい)、データを登録する。

id, name, addressといった感じで入力。idは自動で入力されて欲しいので右下のAuto Incrementにチェック入れて、apply。

そして前回と同じ方法でnameとaddressに情報を入れる。

ここでは、自宅近くのKneipeっていう飲み屋を仮に入れました。住所はthis is 住所って感じで誤魔化しています。

データの呼び出し

とりあえずデータが入ったので、呼び出してみる。

いきなり検索して表示させるのもあれなので

1. なんでもメッセージを受信したら、住所を返信
2. 正確な住所名(曖昧検索は後)を受信したら、住所を返信

の二段構成でいく。

まずsql文を変更。

$sql = $dbh->prepare("SELECT * FROM test_table");

前回の段階では全データを取り出していたのを、該当するもののみ呼び出すようにする。

なので、

$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = 'The Kneipe'");

に変更する。

(レストラン名を他にしている場合、列名を変えてる場合はname = 'The Kneipe'をそれに合わせて変更。)

そうすると、

ちゃんと対象の情報が返信された。

ただ、登録しているデータが1種類なので、ちゃんと確認したかったら2種類以上登録して、name=''の中身を変えて反応を見るとわかりやすいかもしれない。

次は、2. 正確な住所名(曖昧検索は後)を受信したら、住所を返信の部分。

こっからは、メッセージを受け取った後、返信をする直前で処理をするため

$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = 'The Kneipe'");
$sql->execute();
$result = $sql->fetch();
$res = print_r($result, TRUE);

これらの前回書いたものも含めて

$client = new LINEBotTiny($channelAccessToken, $channelSecret);
foreach ($client->parseEvents() as $event) {
    switch ($event['type']) {
        case 'message':
            $message = $event['message'];
            switch ($message['type']) {
                case 'text':

の次に書く。

まず、送信されたメッセージを変数($res_name)に格納。その後、SQL文を変更する。

$res_name = $message[text];
$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = :name");
$sql->bindValue(':name', $res_name);//:nameをバインド、送信された内容で検索
$sql->execute();

SQL文内で変数を扱う場合には、prepare処理するのが原則らしく、その際一旦変数の箇所を:nameといったように:をつけて記述。

その後bindValueで値を入れる。

これをすると、

と、こんな感じに入れた値に対応して返信が来る。

次は、これを曖昧検索にして、そして返信をちゃんと文にする。

(そう言えば画像は全部自分のです、使い所なかったので放出してます。)

いいなと思ったら応援しよう!