こんばんはヤス虎です(*’-‘)
今回はUnityからPHP経由でMySqlにアクセスする方法です。
内容
さくらインターネットのレンタルサーバ(スタンダードプラン)にUnityからアクセスします。さくらのサーバは直接外部からアクセス出来ないみたいなのでPHPをサーバに置いてPHP経由でMySqlのデータにアクセスします。
サーバのデータはphpMyAdminから作りましたけど今回は細かい所は省略します。(^_^;)
PHPはVSCodeで制作してアップロードしてます。
Unityのコード
PHPにユーザーID(userId)を送ると、そのユーザーIDの名前と登録時間が帰って来るコードです。urlは各自の環境に変更して下さい。あとJSONObjectアセットもインストールして下さい。
using System; public class DataServerManager : MonoBehaviour { string url = "http://~~~~~~/data_server.php"; int userId = 1; void Start() { StartCoroutine(DataServer()); } IEnumerator DataServer() { WWWForm form = new WWWForm(); form.AddField("user_id", userId); WWW result = new WWW(url, form.data); yield return result; if (result.error == null) { JSONObject userData = new JSONObject(result.text); JSONObject jsonPos = userData[0]; JSONObject jsonUid = jsonPos.GetField("user_id"); JSONObject jsonName = jsonPos.GetField("name"); JSONObject jsonCreateTime = jsonPos.GetField("create_time"); long uId = jsonUid.i; string name = jsonName.str; string createTime = jsonCreateTime.str; DateTime cdt = new DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc); cdt = cdt.AddSeconds(double.Parse(createTime)).ToLocalTime(); Debug.Log("userId:" + uId.ToString("0000") + " 名前:" + name + " 登録日時:" + cdt.ToString("yyyy-MM-dd HH:mm:ss")); } } }
このコードをオブジェクトにセットして実行するとPHP側が無いので何も起こりませんので次はPHP側のコードです。
PHPのコード
Unityから送られて来たユーザーIDのデータをMySqlから読み込みます。サーバにログインするためのドメイン名,ユーザID,パスワード,データベース名は各自の環境に変更して下さい。
<?php header( 'Content-type: application/json; charset=UTF-8' ); $mysqli = new mysqli( 'ドメイン名','ユーザID','パスワード', 'データベース名' ); if($mysqli->connect_errno) { echo $mysqli->connect_error; exit(); } else { $mysqli->set_charset("utf8"); } $user_id = $_REQUEST['user_id']; $user_id = $mysqli->real_escape_string($user_id); if($stmt = $mysqli->prepare("SELECT user_id, name, create_time FROM user_table WHERE user_id= ?")) { $stmt->bind_param("s", $user_id); $stmt->execute(); $stmt->bind_result($user_id, $name, $create_time); $stmt->fetch(); $data[] = array( 'user_id'=> $user_id, 'name'=> $name, 'create_time'=> $create_time, ); } $stmt->close(); echo json_encode( $data ); $mysqli->close(); ?>
これでサーバにデータが有れば読み込みが出来ます。
まとめ
PHPはイロイロとセキュリティ対策をしないといけないので、取り合えずデータのやり取りの仕方をまとめました。
最後に間違っているかもしれないので自己責任で試してみて下さい。
PHPは難しいですね(‘~’)
2017/5/30 コード修正