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;的输出。非常感谢能够提供帮助的任何人。
答案 0 :(得分:0)
您应该使用参数化查询来阻止sql注入。这是一个您应该阅读的链接,然后添加书签,以便您快速参考。
https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection
我使用参数化查询更新了您的代码,作为您要检查的模型。
{{1}}