Swift httppost数据未插入MySQL数据库 [英] Swift httppost data not inserting to MySQL database

查看:94
本文介绍了Swift httppost数据未插入MySQL数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将数据发送到php并将其插入到mysql数据库中,但是它似乎不起作用.我尝试将数据发送到php只是为了将其编码为json并将其回显为swift并返回结果,因此这意味着php文件已接收到数据.但是,插入数据无效.

I am trying to send data to php and insert it to mysql database but it doesn't seem to work. I have tried sending data to php just to encode it to json and echo it back to swift and it returns a result so it means that the php file received the data. However inserting the data is not working.

swift2 httppost

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代码中添加一些错误处理:

If having the server just echo the request works, then the problem rests within the server, not the client code. I would suggest adding some error handling in the PHP code:

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

?>

注意:

  1. 我不建议以root身份登录.

确保使用mysqli_real_escape_string保护自己免受SQL注入攻击(请参阅第1点).

Make sure you use mysqli_real_escape_string to protect yourself against SQL injection attacks (see point 1).

我不知道您的user表中是否还有其他字段,但是如果这样,您可能要在insert语句中指定列名.即使只有这两列,这也是确保代码永不过时"的好方法.

I don't know if your user table has other fields in it, but if so, you might want to specify the column names in the insert statement. Even if you only have those two columns, it's a good way to "future-proof" your code.

注意,我已对此进行了更改以生成JSON响应.我这样做是因为它使客户端代码更容易解​​析和处理响应.我将NSJSONSerialization留给您.

Note, I've changed this to generate JSON response. I do that because it makes it easier for the client code to parse and handle the response. I'll leave the NSJSONSerialization to you.

这篇关于Swift httppost数据未插入MySQL数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆