HerokuとPHPでLineのDB接続されたチャットボットを作る2(DB接続"準備"編-ClearDB, MySQL Workbench-)
前回:
1. 簡単なBotの作成(おうむ返し)
2. データベース接続(準備)
3.データベース接続(接続)
4. 曖昧検索等の処理
5. 返信処理
おうむ返しできたら次はDBへの接続。(書きながら思ったより長くなりそうな気がしたので「データベース接続」を「データベース接続(準備)」、「データベース接続(接続)」に分けた)
数々のチャットボット系の記事読み漁ったけど、大体DBへの接続まで解説されてなく、大体「次はDBへの接続をやってみたいと思います!」的な終わらし方をしているのがほとんど。
ClearDBアドオンの導入
とりあえず色々調べた結果HerokuではClearDBアドオンを導入するのが一番良さそうだったので、下の記事を参考に導入。
とりあえず導入までできればよかったので上の記事の
1. composer.jsonを作成
2. ClearDBアドオンを導入
までを実行。
1に関しては、前回の記事の通りに作業していたらwebhook.phpがあるファイルの中にcomposer.jsonを作成すればOK。
中身は
{
"require": {
"php": "~5.5.0"
}
}
だけ。
多分"php":の箇所とか、その他Option的な設定があるんだろうなーと思いつつもめんどくさいことになりそうな気がしたのでとりあえず書いてある通りに。
(一応解説っぽいもの↓)
また、2のClearDBアドオンを導入、に関してはコマンドじゃなくてもHerokuから直接アドオンを追加する形でも問題なさそうだった。
webhook.phpへ関数の追記
接続するにあたって下記のコードをwebhook.php(ファイル名変えてたらそっちの方、とにかくDB使うところ)に追記。
function dbConnect(){
$db = parse_url($_SERVER['CLEARDB_DATABASE_URL']);
$db['dbname'] = ltrim($db['path'], '/');
$dsn = "mysql:host={$db['host']};dbname={$db['dbname']};charset=utf8";
$user = $db['user'];
$password = $db['pass'];
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true,
);
$dbh = new PDO($dsn,$user,$password,$options);
return $dbh;
}
ユーザー名等は
parse_url($_SERVER['CLEARDB_DATABASE_URL']);
で抜き出してくれるのでこのままペーストで問題なかった。
(parse_url, $_SERVERに関しての詳細。)
https://php.plus-server.net/function.parse-url.html
また、
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY =>true,
);
ここに関しては完全にOptionなので、あってもなくても問題ない。意味を調べて必要だったら追加する。
DB管理ツールのインストール
DBの管理を毎回自分でSQL書いたりはめんどいので、ツールを入れる。
phpmyadminとかが使いやすいし一般的な気がするけど、ちょっと参考が見つからなかったので、MySQL公式のMSQL Workbenchを使うことに。
導入はこれを参考に。
ざっとインストール→ターミナルでheroku configを入力して情報入手→接続
という流れ。
これで準備は一旦整った、、、はず。
次回接続。
次: