まあ、以下のソース見ればわかると思います。僕のサーバにアクセスするようにしてますが、適時読み違えてください。
githubはここ
zipbはここ
ファイル:sql_choconnect.php
<?php
$chkpdo = new PDO('mysql:host=127.0.0.1;dbname=test905;charset=utf8',getenv(DBUSER),getenv(DBPASS));
if($chkpdo == null){
echo "0";
} else {
echo "1";
}
?>
ファイル:sql_connect.php
<?php
function connectDB(){
try {
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test905;charset=utf8',getenv(DBUSER),getenv(DBPASS));
} catch (PDOException $e) {
exit('' . $e->getMessage());
}
return $pdo;
}
?>
ファイル:sql_getcount.php
<?php
require_once('sql_connect.php');
$pdo = connectDB();
$stmt = $pdo->query("SELECT COUNT(*) FROM hiscore");
echo $stmt->fetchColumn();
?>
ファイル:sql_gethiscore.php
<?php
require_once('sql_connect.php');
$pdo = connectDB();
$stmt = $pdo->query("SELECT * FROM hiscore where score=(select max(score) from hiscore)");
foreach ($stmt as $row) {
echo $row['name'];
echo ',';
echo $row['score'];
echo ',';
}
?>
ファイル:sql_insert.php
<?php
require_once('sql_connect.php');
$pdo = connectDB();
$n = $_POST['name'];
$s = $_POST['score'];
$stmt = $pdo->query("INSERT INTO hiscore (name,score) VALUES('$n',$s)");
$stmt = $pdo->query("COMMIT");
ファイル:GameManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;
public class GameManager : MonoBehaviour
{
public string urlChkConnect = "https://www.edge-bp.com/test/test905/sql_chkconnect.php";
public string urlGetCount = "https://www.edge-bp.com/test/test905/sql_getcount.php";
public string urlInsert = "https://www.edge-bp.com/test/test905/sql_insert.php";
public string urlGetHiscore = "https://www.edge-bp.com/test/test905/sql_gethiscore.php";
public GameObject goConnect;
public GameObject goName;
public GameObject goScore;
public GameObject goInputName;
public GameObject goInputScore;
string[] strConnect = { "接続中","接続成功", "接続失敗"};
private const string connectNG = "接続失敗";
private string coStr;
void Start()
{
goConnect.GetComponent().text = strConnect[0];
StartCoroutine(getCount(urlChkConnect));
}
IEnumerator getCount(string url )
{
IEnumerator coroutine;
int num = 0;
//
// mariaDBに接続できるか。
//
coroutine = getWeb(urlChkConnect,num);
yield return coroutine;
// コルーチンからの戻り値をintに変換する
num = (int)coroutine.Current;
if (num == -1)
{
goConnect.GetComponent().text = strConnect[2];
}
else
{
if (num != 1)
{
goConnect.GetComponent().text = strConnect[2];
}
else
{
goConnect.GetComponent().text = strConnect[1];
}
}
if (goConnect.GetComponent().text != strConnect[1]) yield break;
//
// 何人登録されているか
//
coroutine = getWeb(urlGetCount,num);
yield return coroutine;
// コルーチンからの戻り値をintに変換する
num = (int)coroutine.Current;
if (num == 0)
{
// 誰も登録されていない場合は、とりあえず一人登録する
coroutine = setWeb(urlInsert, "kenji", 1);
yield return coroutine;
}
//
// hiscoreを得る
//
coroutine = getWeb(urlGetHiscore);
yield return coroutine;
// coStrから、一番最初に見つけたハイスコア(同一得点もあり得るので)をフィールドにセットする
setFirsthiscore(coStr);
}
IEnumerator getWeb(string url,int num)
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.isNetworkError)
{
num = -1;
yield return num;
}
yield return int.Parse(www.downloadHandler.text);
}
IEnumerator getWeb(string url)
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.isNetworkError)
{
yield break;
}
// コルーチンの中は ref が使えないので、クラス内の coStr に結果を納めます。
coStr = www.downloadHandler.text;
}
IEnumerator setWeb(string url,string name,int score)
{
WWWForm form = new WWWForm();
form.AddField("name", name);
form.AddField("score", score);
UnityWebRequest www = UnityWebRequest.Post(url, form);
www.chunkedTransfer = false;
yield return www.SendWebRequest();
/*
if (www.isNetworkError || www.isHttpError)
{
Debug.Log("error:"+www.error);
}
else
{
Debug.Log("Form upload complete!");
Debug.Log("MULTIPART: " + www.downloadHandler.text);
}
*/
}
// coStrから、一番最初に見つけたハイスコア(同一得点もあり得るので)をフィールドにセットする
void setFirsthiscore(string str)
{
int n = 0;
string wStr = "";
// 最初の名前を読み込み書き込む。
while (str[n] != ',')
{
wStr += str[n++];
}
goName.GetComponent().text = wStr;
n++;
// 最初の数字を読み込む。
wStr = "HISCORE:";
while (str[n] != ',')
{
wStr += str[n++];
}
goScore.GetComponent().text = wStr;
}
// ボタンが押されたらユーザーと得点をmariaDBに登録する
public void OnClick()
{
if (goInputName.GetComponent().text == "" || goInputScore.GetComponent().text == "" ) return;
// coStrから、一番最初に見つけたハイスコア(同一得点もあり得るので)をフィールドにセットする
StartCoroutine("setInputData");
}
IEnumerator setInputData()
{
IEnumerator coroutine;
coroutine = setWeb(urlInsert, goInputName.GetComponent().text, int.Parse(goInputScore.GetComponent().text));
yield return coroutine;
coroutine = getWeb(urlGetHiscore);
yield return coroutine;
setFirsthiscore(coStr);
}
}