質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Unity

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

6606閲覧

UNITYとPHPとMySQLの通信について

234

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Unity

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

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

1クリップ

投稿2017/10/07 02:47

###前提・実現したいこと
Androidアプリを開発しています。そこで発生した問題を質問させていただきます。

今、Unityから送信したデータをPHPに送り、PHPからPDOを使ってMySQLと通信し、MYSQLからPHPに帰ってきたデータをまたUnityに返すという、機能的に言うと、いわゆるログインシステムを作りたいと思っています。

しかし、Unityで動作確認をしてみるとCatchable fatal error というものが出て動作が成功しません。送る文字型が悪いのかと、該当部分をint型やstring型に直しても動作しませんでした。誰か、この問題の解決策を教えてもらえないでしょうか?

###発生している問題・エラーメッセージ

<br /> Catchable fatal error: Object of class PDOStatement could not be converted to string in /var/www/html/dir/loginsys.php on line 15<br /> UnityEngine.Debug:Log(Object) <Post>c__Iterator1:MoveNext() (at Assets/1.program/接続/Catch.cs:53) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

###該当のソースコード

◆◆◆PHPとMySQLの橋渡しをするコード(ファイル名:mysql_connect.php)◆◆◆ <?php function connectDB(){ $dsn = 'mysql:host=localhost;dbname=db;charset=utf8'; $username = 'us'; $password = 'ps'; try{ $pdo = new PDO($dsn,$username,$password); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ exit(''.$e->getMessage()); } return $pdo; } ?> ◆◆◆Unityが読み取るコード(ファイル名:loginsys.php)◆◆◆ <?php //MySQLに登録されてあるデータからユーザー情報を呼び出し、そのユーザー情報が一致したらログインできます。 require_once('mysql_connect.php'); $pdo = connectDB(); //Unity側からデータを受け取る $ID = ( int ) $_POST['ID']; $password = $_POST['password']; try{ $name = (string) $pdo->query ("SELECT name FROM Login WHERE ID='".$ID."' AND password='".$passwor d."'"); if(empty($name)){    print_r("データが間違っています"); }else{ print_r($name); } }catch(PDOException $e){ var_dump($e->getMessage()); } $pdo = null; ◆◆◆Unity側のログインボタンに埋め込んであるコード(ファイル名:Catch.cs)◆◆◆ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Catch : MonoBehaviour { public Text ResultText_; //結果を格納するテキスト public string str; public Text InputText_; //idを入力するインプットフィールド public Text InputText3_; public string ServerAddress = "192.168.2.111/dir/loginsys.php"; //SendSignalボタンを押した時に実行されるメソッド public void SendSignal_Button_Push() { StartCoroutine("Access"); //Accessコルーチンの開始 } private IEnumerator Access() { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("ID", InputText_.GetComponent<Text>().text); //インプットフィールドからidの取得); dic.Add("password", InputText3_.GetComponent<Text>().text); //複数phpに送信したいデータがある場合は今回の場合dic.Add("hoge", value)のように足していけばよい StartCoroutine(Post(ServerAddress, dic)); // POST 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); } WWW www = new WWW(url, form); yield return StartCoroutine(CheckTimeOut(www, 3f)); //TimeOutSecond = 3s; if (www.error != null) { Debug.Log("HttpPost NG: " + www.error); //そもそも接続ができていないとき ResultText_.GetComponent<Text>().text = "not setuzoku"; } else if (www.isDone) { //送られてきたデータをテキストに反映 ResultText_.GetComponent<Text>().text = www.text; Debug.Log(www.text); str = www.text; if (str == "") { Application.LoadLevel("3"); } } } private IEnumerator CheckTimeOut(WWW www, float timeout) { float requestTime = Time.time; while (!www.isDone) { if (Time.time - requestTime < timeout) yield return null; else { Debug.Log("TimeOut"); //タイムアウト //タイムアウト処理 // // break; } } yield return null; } } ?>

###プログラムコード説明
Unityに用意してあるインプットフィールド1にIDを打ち込み、
インプットフィールド3にpasswordを打ち込みます。(インプットフィールド2は、諸事情により存在しません)

打ち込んだIDとpasswordをloginsys.phpに送り、loginsys.php内でPDOを呼び出し、送られてきた値をMySQLでSELECTする値に用いる。MySQLから帰ってきた値を$nameに格納し、それをunityに送信する

###MySQLに格納されている値
No(INT型)が「1」、ID(INT型)が「123」、password(text型)が「abc」、name(text型)が「花子」です。

###補足情報(言語/FW/ツール等のバージョンなど)
mysqlとapacheのログを見てみたところ、どちらにも接続できているのは確認できたので、僕自身は、phpがうまくデータをUnity側に返せていないか、Unityがphpから送られてきたデータをうまく受け取れていないかのどちらかだと思います。

バージョンはそれぞれ、
・Unity5.6.3f1
・apache2
・php5.6
・MySQL5.2

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

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

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

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

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

guest

回答1

0

Catchable fatal error: Object of class PDOStatement could not be converted to string in /var/www/html/dir/loginsys.php on line 15<br />

って出力されているとおりPHPプログラムのloginsys.php 15行目でエラーになってます。

まずはブラウザやcurlを利用してPHP側が動くまでをやったほうが良いですよ。
($pdo->queryは PDOStatement を返しますがそれをstring変換することは出来ませんよっていう感じのエラーです)

投稿2017/10/07 07:42

編集2017/10/07 07:43
rururu3

総合スコア5545

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問