如何使用swift连接mysql? [英] How to connect mysql with swift?
问题描述
我有一个网络应用程序,我想制作一个iOS应用程序,我不想使用HTTP请求,我的网站有自己的数据库(这是一个MySQL数据库)。我google了很多,但我找不到适合我的解决方案。你们之前有没有人这样做过?
I had a web app and I want to make a iOS app, I don't want to use HTTP request, my website has its own database (which is a MySQL database). I googled a lot, but I can't find a solution work for me. Had any of you guys done this before?
推荐答案
将swift连接到mysql和php非常容易。首先,您需要一个REST API。您可以使用任何可用的框架创建rest api。您也可以仅使用PHP对Web服务进行编码。所以在这里我将展示任何php框架的使用。
Connecting swift to mysql and php is very easy. First you need a REST API. You can create a rest api by using any framework available. You can also code your Web Service using PHP only. So here I will show the use of any php framework.
首先创建一个文件来存储数据库常量。
So first create a file to store your database constants.
<?php
/**
* Created by PhpStorm.
* User: Belal
* Date: 12/08/16
* Time: 7:58 PM
*/
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'iphone');
然后创建另一个php文件来创建数据库连接。
Then create another php file to create database connection.
<?php
class DbConnect
{
private $conn;
function __construct()
{
}
/**
* Establishing database connection
* @return database connection handler
*/
function connect()
{
require_once 'Config.php';
// Connecting to mysql database
$this->conn = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Check for database connection error
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// returing connection resource
return $this->conn;
}
}
现在还需要一个文件来处理数据库操作。
Now you need one more file to handle your database operations.
<?php
class DbOperation
{
private $conn;
//Constructor
function __construct()
{
require_once dirname(__FILE__) . '/Config.php';
require_once dirname(__FILE__) . '/DbConnect.php';
// opening db connection
$db = new DbConnect();
$this->conn = $db->connect();
}
//Function to create a new user
public function createTeam($name, $memberCount)
{
$stmt = $this->conn->prepare("INSERT INTO team(name, member) values(?, ?)");
$stmt->bind_param("si", $name, $memberCount);
$result = $stmt->execute();
$stmt->close();
if ($result) {
return true;
} else {
return false;
}
}
}
最后你需要创建将处理您的http请求的php文件。
Lastly you need to create the php file that will handle your http request.
<?php
//creating response array
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
//getting values
$teamName = $_POST['name'];
$memberCount = $_POST['member'];
//including the db operation file
require_once '../includes/DbOperation.php';
$db = new DbOperation();
//inserting values
if($db->createTeam($teamName,$memberCount)){
$response['error']=false;
$response['message']='Team added successfully';
}else{
$response['error']=true;
$response['message']='Could not add team';
}
}else{
$response['error']=true;
$response['message']='You are not authorized';
}
echo json_encode($response);
现在只需在iOS应用程序上创建视图,然后在buttonclick上向php文件发送请求。代码如下。
Now just create views on your iOS Application and on buttonclick send a request to your php file. The code is as follows.
//
// ViewController.swift
// SwiftPHPMySQL
//
// Created by Belal Khan on 12/08/16.
// Copyright © 2016 Belal Khan. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
//URL to our web service
let URL_SAVE_TEAM = "http://192.168.1.103/MyWebService/api/createteam.php"
//TextFields declarations
@IBOutlet weak var textFieldName: UITextField!
@IBOutlet weak var textFieldMember: UITextField!
//Button action method
@IBAction func buttonSave(sender: UIButton) {
//created NSURL
let requestURL = NSURL(string: URL_SAVE_TEAM)
//creating NSMutableURLRequest
let request = NSMutableURLRequest(URL: requestURL!)
//setting the method to post
request.HTTPMethod = "POST"
//getting values from text fields
let teamName=textFieldName.text
let memberCount = textFieldMember.text
//creating the post parameter by concatenating the keys and values from text field
let postParameters = "name="+teamName!+"&member="+memberCount!;
//adding the parameters to request body
request.HTTPBody = postParameters.dataUsingEncoding(NSUTF8StringEncoding)
//creating a task to send the post request
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil{
print("error is \(error)")
return;
}
//parsing the response
do {
//converting resonse to NSDictionary
let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary
//parsing the json
if let parseJSON = myJSON {
//creating a string
var msg : String!
//getting the json response
msg = parseJSON["message"] as! String?
//printing the response
print(msg)
}
} catch {
print(error)
}
}
//executing the task
task.resume()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
还有一件事你需要做的是在你的Info.plist文件中添加以下行,这是因为默认情况下你不能向非安全网址发送请求,因为我们有http,我们必须做最后这件事。
One more thing you need to do is add the following lines inside your Info.plist file, this is because by default you cannot send request to not secured urls so because we have http we have to do this last thing.
<!-- add from here -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>yourdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
<!-- end of the code -->
资料来源: iOS MySQL数据库教程
Source: iOS MySQL Database Tutorial
这篇关于如何使用swift连接mysql?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!