UnityとPHPでユーザー認証をします。
参考にさせていただいた記事。
・「[Unity]Mysqlサーバとデータのやり取り」
こちらの記事に各処理などが詳しく記載されております。
では改めて。
まずはPHP側の処理。
データベースへはユーザー認証以外でも接続するので、
接続情報は別で用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php //PDO MySQL接続 function connectDB(){ //ユーザ名やDBアドレスの定義 $dsn = 'mysql:dbname=データベース名;host=ホスト名;charset=文字コード'; $username = 'ユーザー名'; $password = 'パスワード'; try { $pdo = new PDO($dsn, $username, $password); } catch (PDOException $e) { exit('' . $e->getMessage()); } return $pdo; } |
次に、ログイン認証を行うファイル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php //IDとPASSによるログインファイル //接続情報 require_once('connect.php'); $pdo = connectDB(); //POST受け取り $ID = $_POST["ID"]; $PASS = $_POST["PASS"]; //結果受け取り用 $res =""; try { //クエリ発行 (ユーザー名とパスワードが一致すれば、レベル・ログイン日時を返す) $stmt = $pdo -> prepare("SELECT LEVEL,LOGINTIME FROM Test WHERE ID = :ID AND $PASS = :PASS"); $stmt -> bindParam(':ID', $ID, PDO::PARAM_STR); $stmt -> bindParam(':PASS', $PASS, PDO::PARAM_STR); //クエリ実行 $stmt -> execute(); //結果を取得(ヒットしなければ0) if ($rows = $stmt -> fetch()) { $res = $rows["LEVEL"] .","; $res .= $rows["LOGINTIME"]; } } catch (PDOException $e) { var_dump($e->getMessage()); } //DB切断 $pdo = null; //unity に結果を返す echo $res; |
※「Test」というテーブルに「ID,PASS,LEVEL,LOGINTIME」というカラムがあるものとします。
Unity側から送られてきたIDとPASSを使って、認証しています。
認証に成功するとレベルとログイン時間が返ってきます。
では次、検索用と新規登録用のPHPファイル
■検索用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php //ランダム生成されたIDが既にあるかを確認するファイル //接続情報 require_once('mysql_connect.php'); $pdo = connectDB(); //IDが既に存在すればIDを,なければ空文字を返す //POST受け取り $ID = $_POST["ID"]; //結果受け取り用 $res =""; try { //IDの検索 //クエリ発行 (IDが存在するか検索、存在していれば空文字) $stmt = $pdo -> prepare("SELECT ID FROM Test WHERE ID = :ID"); $stmt -> bindParam(':ID', $ID, PDO::PARAM_STR); //クエリ実行 $stmt -> execute(); //結果を取得 $res = $rows['ID']; } catch (PDOException $e) { var_dump($e->getMessage()); } //DB切断 $pdo = null; //unity に結果を返す echo $res; } |
■新規登録用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php //新規登録ファイル //接続情報 require_once('mysql_connect.php'); $pdo = connectDB(); //ID・PASSは乱数生成。他は初期値で登録 //ユーザー名とパスワードをPOST受け取り $ID = $_POST["ID"]; $PASS = $_POST["PASS"]; $LOGINTIME = $_POST["LOGINTIME"]; //ログイン日時 //結果受け取り用 $res ="-1"; try { //クエリ発行 (初期値でレコード追加) $stmt = $pdo -> prepare("INSERT INTO Test (ID,PASS,LEVEL,LOGINTIME) VALUES (:ID,:PASS,:LEVEL,:LOGINTIME)"); $stmt -> bindValue(':ID', $ID, PDO::PARAM_STR); $stmt -> bindValue(':PASS', $PASS, PDO::PARAM_STR); $stmt -> bindValue(':LEVEL',$LEVEL, PDO::PARAM_INT); $stmt -> bindValue(':LOGINTIME', $LOGINTIME, PDO::PARAM_STR); //クエリ実行 $stmt -> execute(); $res =""; } catch (PDOException $e) { var_dump($e->getMessage()); } //DB切断 $pdo = null; //unity に結果を返す echo $res; |
では次、Unity側からの処理。
長くなるので、次の記事で紹介します。