🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

5122閲覧

Unityで、Xamppのlocalhostに配置したphpに接続し、MySQLのデータを取得しようとした際に 404 Not Found になります。

User_001

総合スコア5

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/02/06 15:47

質問させていただきます。
目的は、Unityでlocalhostのphpに接続し、xamppのmysqlから情報を取得したいと考えています。
参考にしているサイトは下記です。
https://qiita.com/nmxi/items/9da751e88e0b6aefaa62

localhostのxamppに下記の配置で『setuzoku.php』を置いています。

C:\xampp\htdocs\php\unity\setuzoku.php

xamppを起動し、ApacheとMySQLをstartした状態で、下記アドレスをクロームで表示すると問題なく、xamppのMySQLからデータの取得ができています。

http://localhost/php/unity/setuzoku.php

ですが、Unityで上記のアドレスで接続しても、 HttpPost NG: 404 Not Found が返ってくるだけで接続できません。
原因が分からない状況の為、質問させていただきました。
どなたかご指摘いただけますと幸いです。
何卒、宜しくお願い申し上げます。


<PHPのソースコード>
setuzoku.php

PHP

1<?php 2 require_once('address.php'); 3 4 // $id = isset($_POST['id'])? $_POST['id'] : 1; // ※この行はPHPだけの動作確認用の行です。無視して下さい。 5 6 //POSTうけとり 7 $id = $_POST["id"]; //要求されてくるid 8 9 $res; 10 11 12 try{ 13 $pdo = new PDO('mysql:host='.servername.'; dbname='.databasename.'; charset=utf8;' , username , password); 14 } catch(PDOException $e){ 15 echo "接続に失敗しました。".$e->getMessage(); 16 exit; 17 } 18 19 $sql = <<<SQL 20 SELECT empID,empName 21 FROM employee 22 WHERE empID = {$id}; 23 SQL; 24 25 $stmt = $pdo->query($sql); 26 27 while($row = $stmt -> fetch() ){ 28 $res = $row['empID']; 29 $res = $res. $row['empName']; 30 } 31 32 $stmt -> closeCursor(); 33 $pdo = null; 34 35 echo $res; 36 37 exit; 38?>

address.php

PHP

1<?php 2 define("servername" , "localhost"); 3 define("databasename" , "empDB"); 4 define("username" , "root"); 5 define("password" , ""); 6?>

<UnityのC#のソースコード>

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class Catch : MonoBehaviour 7{ 8 9 public Text ResultText_; //結果を格納するテキスト 10 public Text InputText_; //idを入力するインプットフィールド 11 12 public string ServerAddress = "http://localhost/php/unity/setuzoku.php"; 13 14 //SendSignalボタンを押した時に実行されるメソッド 15 public void SendSignal_Button_Push() 16 { 17 StartCoroutine("Access"); //Accessコルーチンの開始 18 } 19 20 [System.Obsolete] 21 private IEnumerator Access() 22 { 23 Dictionary<string, string> dic = new Dictionary<string, string>(); 24 25 dic.Add("id", InputText_.GetComponent<Text>().text); //インプットフィールドからidの取得); 26 //複数phpに送信したいデータがある場合は今回の場合dic.Add("hoge", value)のように足していけばよい 27 28 StartCoroutine(Post(ServerAddress, dic)); // POST 29 30 yield return 0; 31 } 32 33 34 35 36 37 [System.Obsolete] 38 private IEnumerator Post(string url, Dictionary<string, string> post) 39 { 40 WWWForm form = new WWWForm(); 41 foreach (KeyValuePair<string, string> post_arg in post) 42 { 43 form.AddField(post_arg.Key, post_arg.Value); 44 } 45 WWW www = new WWW(url, form); 46 47 yield return StartCoroutine(CheckTimeOut(www, 3f)); //TimeOutSecond = 3s; 48 49 if (www.error != null) 50 { 51 Debug.Log("HttpPost NG: " + www.error); 52 //そもそも接続ができていないとき 53 54 } 55 else if (www.isDone) 56 { 57 //送られてきたデータをテキストに反映 58 ResultText_.GetComponent<Text>().text = www.text; 59 } 60 } 61 62 63 64 65 66 [System.Obsolete] 67 private IEnumerator CheckTimeOut(WWW www, float timeout) 68 { 69 float requestTime = Time.time; 70 71 while (!www.isDone) 72 { 73 if (Time.time - requestTime < timeout) 74 yield return null; 75 else 76 { 77 Debug.Log("TimeOut"); //タイムアウト 78 //タイムアウト処理 79 // 80 // 81 break; 82 } 83 } 84 yield return null; 85 } 86} 87

データベースのemployeeテーブルの構造は、列を
empID | empName
だけにしています。

情報は

1 | 一番の社員
2 | 二番目の社員
3 | 三番目の社員

と、しています。


何卒、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/02/06 22:15

xampp と unity アプリは同じパソコンで実行していますか?
m.ts10806

2021/02/06 22:50 編集

Unityのアプリを起動している端末からそのURLを直接ブラウザで実行するとどうなるんでしょう。
User_001

2021/02/07 04:32 編集

ご返信いただきありがとうございます。 返信が遅れてしまい申し訳ございません。 CHERRY様、同じパソコンで実行しております。 m.ts10806様、現時点では別のパソコンで実行しておらず、同じパソコンで実行していますので、別のパソコンで実行した場合の挙動はわかりません。 申し訳ございません。
guest

回答1

0

自己解決

自己解決しました為、記載いたします。
下記の動画を参考に、UnityWebRequest型で作成しなおした所、問題なく処理が通りました。

ttps://www.youtube.com/watch?v=C0V3RhAVHac

恐らく旧型式のWWWForm型では、原因は不明ですが処理が通らない環境である可能性があるのかもしれません。
お騒がせしてしまい申し訳ございませんでした。

投稿2021/02/07 10:41

編集2021/02/07 10:48
User_001

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問