#前回までのあらすじ
【第三回】コロナ禍だから何かできることを
####実装イメージ図
LINEを利用して保健所の担当者の負担を軽減するとともに、自宅療養者はいつでもつながっている安心感を持たせるためのツールイメージです。
##取得したデータをもとに、データベースへの更新までの流れを考えよう
今回は、体温や体調の報告の場合はユーザー状態をDBへ保存する処理を説明します。
データベースはMYSQLを使用します。
エラー時の時は、エラーだったことを返す処理の方が親切なんですが、ひとまず終了としときます。
###データベースへの接続方法
// 宣言
define("DATABASE_URL", 'mysql:host=アドレス;dbname=データベース名;charset=utf8');
define("DATABASE_USER", '接続ユーザー名');
define("DATABASE_PASS", '接続パスワード');
try{
// 接続処理
$dbh = new PDO(DATABASE_URL, DATABASE_USER, DATABASE_PASS);
// 静的プレースホルダを指定
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
// エラー発生時に例外を投げる
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $ex){
exit;
}
###ユーザー情報の取得方法
//LINE IDを利用して、ユーザーが存在するかチェックを行う
try{
$SQL =
<<<EOM
SELECT
USER_ID,
USER_NAME
FROM
LINE_USER
WHERE
LINE_ID = :line_id
EOM;
$stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->bindParam('line_id', $line_id, PDO::PARAM_STR);
$stmt->execute();
}catch(PDOException $ex){
exit;
}
//ユーザーIDとユーザー名を取得しておく。
if($stmt->rowCount()>=0){
$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT);
$user_id = $row[0];
$user_name = $row[1];
}
###データの登録方法
LINE_ACCESSのテーブルはLINEでアクションがあったときの履歴保存用(いつ、だれが、どんなメッセージを送ってきたか)
LINE_USERは登録ユーザーの情報(ユーザーIDとLINE IDとユーザー名と最後にアクションがあった日時)
//トランザクション処理を開始
$dbh->beginTransaction();
try {
$SQL =
<<<EOM
INSERT INTO LINE_ACCESS(
USER_ID,
ACCESS_DATE,
MESSAGE
)VALUES(
:user_id,
NOW(),
:message
)
EOM;
$stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_STR);
$stmt->bindParam(':message', $message_text, PDO::PARAM_STR);
$stmt->execute();
$SQL =
<<<EOM
UPDATE LINE_USER
SET
LAST_ACCESS = NOW()
WHERE
USER_ID = :user_id
EOM;
$stmt = $dbh->prepare($SQL, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_STR);
$stmt->execute();
//コミット
$dbh->commit();
}catch(Exception $ex){
//ロールバック
$dbh->rollback();
}
これを見て2点、気づいたかたもいるかもしれません。
#####1.LINE IDをユーザーIDになんでしてないの?LINE IDだけでいいんじゃないの?
LINEを利用していない自宅療養者もいるため、敢えて別ユーザーIDを作成しています。
#####2.ユーザー登録はどうやるねん!
ということで、次回はユーザー登録の実装(LIFF)について説明します。
#コロナ禍だから何かできることをー 自宅療養者連絡ツール ー
【第一回】実装イメージ図と動画
【第二回】LINEからデータを取得して返すまでの流れ
【第三回】LINEからデータベースまでの流れ
->>【第四回】データベースへの更新までの流れ
【第五回】ユーザー登録の仕組み-LINEbotの設定部分
【第六回】ユーザー登録の仕組みLIFFで表示する画面の開発
【第七回】データベースの構造
【第八回】WEB画面上でできる機能
【第九回】まとめ