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

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

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

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

892閲覧

Error Domain=NSCocoaErrorDomain Code=3840 "No value."の解決方法

kappaTKO

総合スコア37

MySQL

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2019/07/09 05:57

SwiftでMySQLに接続する場合のデータ取得方法について教えてください。

iPadで名前と年齢を入力して保存ボタンをタップするとMySQLにデータを保存させる処理を作成しています。

Swift、MySQL1、JSONとの連携部分に問題があると思うのですが、どのようにデバッグを進めれればよいのか、ご教示いただければ幸いです。

下記ホームページを参考にしています。
リンク内容

エラー内容:
Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}

環境:
MacPC macOS Ver10.14.5
Swift4.2
MAMP Ver5.3
PHP Ver7.3.1
MySQL Ver5.7.25

ディレクトリ:
MAMP/htdocs/WebService

MySQL:
データベース db_boy
テーブル m_boy (name, old)

PHP:

config.php <?php define('DB_HOST','localhost'); define('DB_NAME','db_boy'); define('DB_USERNAME','boy'); define('DB_PASSWORD','boy1234'); define('DB_CHARSET','utf8'); ?> DBConnect.php <?php class DbConnect { private $conn; function __construct(){ } /* *データベースへの接続 */ function connect(){ require_once 'config.php'; //Mysql DataBaseに接続 $this -> conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME); //DB接続時のエラーがないか確認 if(mysqli_connect_errno()){ echo "データベースに接続されませんでした" . mysqli_connect_errno(); } //接続リソースの保持 return $this -> conn; ?> DbOparation.php <?php /* *DBに対する指示ファイル */ class DbOparation { private $conn; //コンストラクター function __construct(){ require_once dirname(__FILE__).'/config.php'; require_once dirname(__FILE__).'/DbConnect.php'; //DBに接続 $db = new DbConnect(); $this -> conn = $db->connect(); } //新しいユーザーを作成する機能 public function saveBoy($name, $Old) { $stmt = $this->conn->prepare("INSERT INTO boy(name, old) values(?, ?)"); $stmt -> bind_param("ss", $name, $Old); $result = $stmt -> execute(); $stmt -> close(); if($result) { return true; }else{ return false; } } ?> saveBoy.php <?php /* *実際にDBに値を挿入する処理をする */ // 返信が配列になるようにする $response = array(); if($_SERVER['REQUEST_METHOD']=='POST'){ //値の取得 $boyName = $_POST['name']; $boyOld = $_POST['old']; //DBファイルの操作 require_once '../includes/DbOperation.php'; $db = new DbOparation(); //値の挿入 if($db->saveBoy($name,$Old)){ $response['error']=false; $response['message']= '登録が完了しました'; }else{ $response['error'] = true; $response['message'] = '登録できませんでした'; } }else{ $response['error'] = true; $response['messgae'] = 'あなたは承認されていません'; } echo json_encode($responce); ?>

Swift:

import UIKit class ViewController: UIViewController { // URL to our web service let URL_SAVE_BOY = "http://localhost/WebService/api/saveBoy.php" @IBOutlet weak var NameFeild: UITextField! @IBOutlet weak var oldFeild: UITextField! @IBAction func saveBtn(_ sender: UIButton) { // created NSURL let requestURL = NSURL(string: URL_SAVE_BOY) // creating NSMutableURLRequest let request = NSMutableURLRequest(url: requestURL! as URL) // setting the method tp post request.httpMethod = "POST" // テキストフィールドから値を取得 let boyName = NameFeild.text let boyOld = oldFeild.text // でキスとフィールドからキーと値を連結してpostパラメータを生成 let postParameters = "name="+boyName!+"&old="+boyOld!; // ボディをリクエストするためのパラメータを追加 request.httpBody = postParameters.data(using: String.Encoding.utf8) // 投稿要求を送信するタスクを作成 let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in if error != nil { //print("error is (error)") print("(error ?? "nil" as! Error)") return; } // 返ってきたJsonの解析 do { // NSDictionaryに変換 let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary // jsonデータの解析 if let parseJSON = myJSON{ // stringの生成 var msg : String! //jsonからのレスポンスを取得 msg = parseJSON["message"] as! String? // 返ってきたものを表示 print(msg ?? "text is nil") } }catch{ print(error) } } task.resume() } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

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

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

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

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

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

guest

回答2

0

Swiftはとりあえず後回しにして、サーバ側のサンプルを作成していきます。

投稿2019/07/10 07:04

kappaTKO

総合スコア37

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

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

0

ベストアンサー

一気に端末とサーバを結合テストしないで、まずサーバ側に対して、curl(コマンドライン)やブラウザを使って正しくデータが保存できるか確認してみましょう。Swiftはその後で良いと思います。

投稿2019/07/09 17:03

k2moons

総合スコア184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問