我正在尝试将数据发送到php并将其插入到mysql数据库,但它似乎不起作用。我尝试将数据发送到php只是为了将其编码为json并将其回显为swift并返回结果,因此这意味着php文件已接收到数据。但是,插入数据无效。
swift2 httppost
func post() { let myUrl = NSURL(string: "http://localhost:8080/json/json.php"); let request = NSMutableURLRequest(URL:myUrl!); request.HTTPMethod = "POST" // Compose a query string let postString = "firstName=James&lastName=Bond"; request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil { print("error=\(error)") return } // You can print out response object print("response = \(response)") // Print out response body let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) print("responseString = \(responseString)") //Let’s convert response sent from a server side script to a NSDictionary object: do{ let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary if let parseJSON = myJSON { // Now we can access value of First Name by its key let firstNameValue = parseJSON["firstName"] as? String print("firstNameValue: \(firstNameValue)") } }catch let error as NSError { print("JSON Error: \(error.localizedDescription)") } } task.resume() }
json.php
<?php // Read request parameters $firstName= $_REQUEST["firstName"]; $lastName = $_REQUEST["lastName"];// Store values in an array $conn = mysqli("localhost", "root", "root", "notify"); $query = mysqli_query($conn, "INSERT INTO user values('', '$firstName', '$lastName')"); ?>
如果让服务器只是响应请求,那么问题就出在服务器内部,而不是客户端代码。我建议在PHP代码中添加一些错误处理:
<?php // specify that this will return JSON header('Content-type: application/json'); // open database $con = mysqli_connect("localhost","user","password","notify"); // Check connection if (mysqli_connect_errno()) { echo json_encode(array("success" => false, "message" => mysqli_connect_error(), "sqlerrno" => mysqli_connect_errno())); exit; } // get the parameters $field1 = mysqli_real_escape_string($con, $_REQUEST["firstName"]); $field2 = mysqli_real_escape_string($con, $_REQUEST["lastName"]); // perform the insert $sql = "INSERT INTO user (first_name, last_name) VALUES ('{$field1}', '{$field2}')"; if (!mysqli_query($con, $sql)) { $response = array("success" => false, "message" => mysqli_error($con), "sqlerrno" => mysqli_errno($con), "sqlstate" => mysqli_sqlstate($con)); } else { $response = array("success" => true); } echo json_encode($response); mysqli_close($con); ?>
笔记:
我不建议以身份登录root。
root
确保mysqli_real_escape_string用于保护自己免受SQL注入攻击(请参阅第1点)。
mysqli_real_escape_string
我不知道您的user表中是否包含其他字段,但是如果这样,您可能要在insert语句中指定列名。即使您只有这两列,这也是“确保未来”代码的好方法。
user
insert
注意,我已经更改了它以生成JSON响应。我这样做是因为它使客户端代码更容易解析和处理响应。我留给NSJSONSerialization你。
NSJSONSerialization