每次我尝试使用Swift和Alamofire将数据发布到MySQL数据库时数据都显示为空?

时间:2018-06-07 06:40:23

标签: php mysql json swift alamofire

func uploadPostData() {

    let parameters: [String: Any] =
        ["title": "\(titleName!)", // string
        "link": "\(link!)", // string
        "available_shares": sharesNum!, // int
        "risk": riskLevel!, // int
        "description": descriptionView.text!, // string
        "postID": postID, // string
        "price": 0.99,
        "timestamp": 700
        ]
    print(parameters)

    Alamofire.request("example.com", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil)
        .responseJSON() { response in
            switch response.result {



    }
}

上面是我调用PHP脚本的Swift方法,我将在下面附上。我相信问题在于我的PHP,因为肯定会收到POST请求。调用方法时,我的数据库实际上会更新,但所有列中的数据都为null /默认值。我尝试打印出参数字典,但它完全按预期显示,没有空值。

    <?php

    $item1 = $_POST['title'];
    $item2 = $_POST['link'];
    $item3 = $_POST['available_shares'];
    $item4 = $_POST['risk'];
    $item5 = $_POST['description'];
    $item6 = $_POST['postID'];
    $item7 = $_POST['price'];
    $item8 = $_POST['timestamp'];

// Create connection
    $mysqli=mysqli_connect("localhost","username","password","database"); 

// Check connection
    if (mysqli_connect_errno())
    {
      echo "
Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $query = "INSERT INTO `TB_POSTS` (postID, timestamp, link, price, title, available_shares, risk, description) VALUES ('".$item6."','.$item8.','".$item2."','".$item7."','".$item1."','".$item3."','".$item4."','".$item5.")";

    $result = mysqli_query($mysqli,$query);

    echo $result; // sends 1 if insert worked
?>

底线,如果插入有效,则输出1,令人惊讶地确实有效。但同样,问题似乎是更新的数据实际上从未出现在数据库中。我知道它正在更新,因为表中还有一行,但实际值从不存在。当我使用.responseJSON时,我也得到了Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength错误,但当我将其更改为.responseString时,我会得到&#39; SUCCESS&#39;的输出。非常感谢能够提供帮助的任何人。

1 个答案:

答案 0 :(得分:0)

您应该使用参数化查询来阻止sql注入。这是一个您应该阅读的链接,然后添加书签,以便您快速参考。

https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection

我使用参数化查询更新了您的代码,作为您要检查的模型。

{{1}}