如何使用swift连接mysql?

我有一个networking应用程序,我想做一个iOS应用程序,我不想使用HTTP请求,我的网站有自己的数据库(这是一个MySQL数据库)。 我GOOGLE了很多,但我找不到解决scheme为我工作。 你们有没有做过这个?

将swift连接到mysql和php是非常容易的。 首先你需要一个REST API。 您可以使用任何可用的框架来创build一个restAPI。 您也可以使用PHP编写您的Web服务。 所以在这里我将展示使用任何PHP框架。

所以首先创build一个文件来存储你的数据库常量。

<?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'); 

然后创build另一个php文件来创build数据库连接。

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

现在你需要一个文件来处理你的数据库操作。

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

最后,您需要创build将处理您的http请求的php文件。

 <?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应用程序上创build视图,然后在button上向PHP文件发送请求。 代码如下。

 // // 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文件中添加下面的代码,这是因为默认情况下你不能发送请求到不安全的url,因为我们有http,我们必须做最后一件事情。

 <!-- 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数据库教程

移动应用通常连接到API,而不是直接连接到数据库。 我知道你说过你不想使用HTTP请求,但是这确实是正确的方法。 使用任何你喜欢的编程语言来做一个REST服务,并做对。

如果你喜欢JS,可以试试Node上的SailsJS。 从MySQL数据库创buildAPI需要5分钟的时间。 http://sailsjs.org

你应该为你的数据库实现一个REST接口(也就是上面build议的节点)。 或者,您可以将数据库移至AZURE,并使用Microsoft“开箱即用”的iOS API。 这也会给你安全性(如果你需要的话)你也可以在后端实现一个web服务,并使用iOS的服务。