Swift httppost 数据未插入 MySQL 数据库

Posted

技术标签:

【中文标题】Swift httppost 数据未插入 MySQL 数据库【英文标题】:Swift httppost data not inserting to MySQL database 【发布时间】:2015-12-05 09:58:11 【问题描述】:

我正在尝试将数据发送到 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')");

 ?>

【问题讨论】:

你的字段名在哪里?你插入查询我错了先检查sql语法 @RahulSaxena 这不一定是 SQL 错误(因为如果您在 INSERT 语句中提供所有列,则列名是可选的)。但你是对的,最好的做法是包含列名。 【参考方案1】:

如果让服务器只是回显请求就可以了,那么问题出在服务器上,而不是客户端代码。我建议在 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 登录。

    确保使用mysqli_real_escape_string 来保护自己免受 SQL 注入攻击(参见第 1 点)。

    我不知道您的user 表中是否有其他字段,但如果有,您可能需要在insert 语句中指定列名。即使您只有这两列,这也是让您的代码“面向未来”的好方法。

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

【讨论】:

谢谢,我试试看。 不用说,这不会解决问题,但会让您诊断它。我怀疑表/列名称存在身份验证问题或问题,或者该表中有其他列未在 SQL 中指定。但在我们看到错误信息之前,我们不能说。

以上是关于Swift httppost 数据未插入 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire Swift HTTPPost 登录和 JSON 响应

mysq

用 [HttpPost] 装饰时 ASP MVC 控制器操作“未找到 404”错误

mysq 学习四 多表查询

Swift之算法:插入排序

Android http发布到ASP.NET Web API不会插入数据