1
/
5

swiftからmysqlにデータを登録してみる

只今iOSアプリを開発しているのですが、どうやってSwiftとPHPとMySQLを使ってDBにデータを挿入したりするのかまとめました。

開発環境 

Swift3
PHP7
Mysql 5.6

DBテーブルはこんな感じ

Boy
id name old

ディレクトリを作りましょう構成はこんな感じです。

WebService
L api
L saveBoy.php
L includes
L config.php
L DBConnect.php
L DbOperation.php

では、はじめにconfig.phpの中身を書いていきます。DBに接続される際の情報を書きます

config.php

<?php
define('DB_USERNAME', 'yourName');
define('DB_PASSWORD', '');
define('DB_HOST', 'yourHost');
define('DB_NAME', 'yourDB');

次にDBConnect.phpファイルを書いていきます。文字通りDBと接続するためのファイルです。
privateを使ってセキュリティーのためアクセスを制限しましょう

DBConnect.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;
    

DBに指示を出すファイルを書いていきます。

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;
        }
    }

コードをみるとわかると思いますが、DBに登録するための関数を作成して、apiを使用した時にデータを挿入するようにしています。$stmtですがこれはstatementの略です、SQLを指しています。がここは好きな名前にしてもOKです。

いよいよAPIの部分を書いていきます。

saveBoy

<?php
/*
*実際にDBに値を挿入する処理をする
*/

// 返信が配列になるようにする
$response = array();

if($_SERVER['REQUEST_METHOD']=='POST'){

    //値の取得
    $teamName = $_POST['name'];
    $memberCount = $_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);

if($_SERVER['REQUEST_METHOD']=='POST')の部分でiOSから送られてくるメソッドがPostなのか否か判断し処理を書いていきます。DbOparationクラスを継承し処理を書きます。

これでPHP側の設定は完了です。

では、どうやってiOSにapiを組み込んでいくか解説します。

その前にストーリーボードを使ってUIを簡単に作ります。

終わったらViewControlerに戻ってコードを書いていきましょう

ViewController

import UIKit

class ViewController: UIViewController {
    
    //URL to our web service
    let URL_SAVE_BOY = "http://[Your ip Address]/MyWebService/api/createteam.php"
    
    @IBOutlet weak var NameFeild: UITextField!
    @IBOutlet weak var oldFeild: UITextField!
    
    //Button action Method
    @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 to post
        request.httpMethod = "POST"
        
        //テキストフィールドから値の取得
        let teamName = NameFeild.text
        let memberCount = NumberFeild.text
        
        //テキストフィールドからキーと値を連結してpostパラメータを生成する
        let postParameters = "name="+teamName!+"&member="+memberCount!;
        
        //ボディをリクエストするためのパラメータを追加する
        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)")
                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)
                }
                
            }catch{
                print(error)
            }
        }
        task.resume()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }


}


処理の中身については書かれているコメントをみるとわかると思います。
これでビルドしてみるとテキストフィールドに入力した値がDBに入っているはずです

株式会社アクシスでは一緒に働く仲間を募集しています
10 いいね!
10 いいね!

同じタグの記事

今週のランキング

安藤 一心さんにいいねを伝えよう
安藤 一心さんや会社があなたに興味を持つかも