只今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に入っているはずです