やりたいこと
Unity(WebGL)とphpを使い、mySQLにアクセスしてデータの取得や更新をしたい。
Unity⇔php⇔mySQLと連動させています。
バージョン
Unity 2021.1.16f.1
MySQL 5.7
できないこと
PrimaryKeyであるTEXT(string型)のidというカラムを使い、DB上のデータの特定の行の取得を試しましたが何も取得できませんでした(空欄が返ってくる)。
試しにint型のlevelカラムでも試したところ、これは正常に指定した行が取得できましたので、データの型が関係しているという事までは分かったのですが、解決策が分かりません。
理由や解決策を教えて頂きたいです。
よろしくお願い致します。
mySQL
php
<?php require_once('connect.php'); $pdo = connectDB(); $id = $_POST["id"]; $stmt = $pdo->prepare('SELECT * FROM PLAYERS WHERE id = :id'); $stmt->bindValue(':id', $id, PDO::PARAM_STR); $res = $stmt->execute(); $data = $stmt->fetch(); $pdo = null; print_r($data); ?>
↑id(string型カラム)を指定するとデータは取得できず、空欄が返ってきました。
<?php require_once('connect.php'); $pdo = connectDB(); $level = $_POST["level"]; $stmt = $pdo->prepare('SELECT * FROM PLAYERS WHERE level = :level'); $stmt->bindValue(':level', $level, PDO::PARAM_STR); $res = $stmt->execute(); $data = $stmt->fetch(); $pdo = null; print_r($data); ?>
↑ 試しにint型カラムのlevelを使ってみたら問題なく取得できましたが、primaryKeyがidなのでidで指定したいです。
Unity
using System.Collections; using System.Collections.Generic; using Unity.Collections; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class TestW : MonoBehaviour { private string ServerAddress_Get = "http://xxx.stars.ne.jp/get.php"; private UnityWebRequest request; void Start() { StartCoroutine("Access"); } private IEnumerator Access() { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("id", "0"); // idが0のrowを取得したい // dic.Add("level", "2000"); // levelで指定すれば取得できる StartCoroutine(Post(ServerAddress_Get, dic)); yield return 0; } private IEnumerator Post(string url, Dictionary<string, string> post) { WWWForm form = new WWWForm(); foreach (KeyValuePair<string, string> post_arg in post) { form.AddField(post_arg.Key, post_arg.Value); } request = UnityWebRequest.Post(url, form); yield return StartCoroutine(CheckTimeOut(request, 3f)); if (request.error != null) { Debug.Log("HttpPost NG: " + request.error); } else if (request.isDone) { var te = GameObject.Find("Test1").GetComponent<Text>(); te.text = request.downloadHandler.text; // 取得したrowの中身 } } private IEnumerator CheckTimeOut(UnityWebRequest request, float timeout) { int cnt = 0; yield return request.SendWebRequest(); float requestTime = Time.time; while (!request.isDone) { if (Time.time - requestTime < timeout) { yield return null; cnt += 1; } else { request.Abort(); // 切断 break; } } yield return null; } void OnDestroy() { request.Dispose(); // 忘れるとエラー } }
結果
回答1件
あなたの回答
tips
プレビュー