对于我的生活,我似乎无法弄清楚为什么会发生这种情况。我们从一个iOS应用程序发送正文到一个php后端POST API,写入一个MYSQL服务器。我们已经将请求主体打印到一个txt文件中,并且显然获取了所有数据,但是当我们尝试存储它时,它每次都会失败。如果我们从iOS应用程序发送不包含Base64编码字符串的数据,它会将数据存储到数据库中。我们试图将字符串的Base64存储LONGTEXT格式:POST多个参数到PHP到MYSQL数据库
<?php
include('db_connect.php');
$http_data = file_get_contents('php://input'); //This is json data
$data = json_decode($http_data);
$b64img1 = $data->img1; //A Base64 Encoded String
$b64img2 = $data->img2; //A Base64 Encoded String
$img1 = $data->img1Title;
$img2 = $data->img2Title;
$cat = $data->category;
$user = $data->userID;
$current = date('Y-m-d H:i:s');
$time = $data->length;
$length = date('Y-m-d H:i:s', time() + $time);
$postID = $current . '_' . $user . '_' . $length;
$loc = mysql_query("SELECT * FROM users WHERE BINARY userID = '$user';");
$row = mysql_fetch_array($loc);
$location = $row['location'];
$numPosts = $row['post_number'];
$posts = $row['postIDs'];
$newNum = $numPosts + 1;
$newPosts = $posts . $postID . ', ';
mysql_query("INSERT INTO `content` (`postID`,`img1`,`img2`,`img1title`,`img2title`,`category`,`user`,`location`,`postUntil`) VALUES ('$postID','$b64img1','$b64img2','$img1','$img2','$cat','$user','$location','$length');");
mysql_query("UPDATE users SET post_number = '$newNum', postIDs = '$newPosts' WHERE BINARY userID = '$user';");
echo "{\"Success\":\"Yes\"}";
mysql_close($con);
exit;
?>
这里是我们用来发送到我们的POST API iOS的代码...
NSData *dataImage = [[NSData alloc] init];
NSData *dataImage2 = [[NSData alloc] init];
UIImage *selectedImage = info[UIImagePickerControllerEditedImage];
dataImage = UIImagePNGRepresentation(selectedImage);
NSString *image = [dataImage base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
dataImage2 = UIImagePNGRepresentation(selectedImage);
NSString *image2 = [dataImage2 base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSDictionary *dictionaryOrArrayToOutput = @{@"img1" : image,
@"img2" : image2,
@"img1title" : titleOne,
@"img2title" : titleTwo,
@"category" : category,
@"userID" : userID,
@"length" : time};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionaryOrArrayToOutput
options:NSJSONWritingPrettyPrinted
error:&error];
if (! jsonData)
{
NSLog(@"Got an error: %@", error);
}
else
{
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"%@", jsonString);
NSData *postData = [jsonString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:SAMPLEURL]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSURLResponse *requestResponse;
NSData *requestHandler = [NSURLConnection sendSynchronousRequest:request returningResponse:&requestResponse error:nil];
NSString *requestReply = [[NSString alloc] initWithBytes:[requestHandler bytes] length:[requestHandler length] encoding:NSASCIIStringEncoding];
NSLog(@"REPLY FROM SERVER: %@", requestReply);
}
有谁看到的东西不对,或者可以指向正确的方向?这让我疯狂,似乎无法找到一个原因,这是行不通的。
把问题解决一点。确保您正确地将JSON发布到服务器,使用Charles Proxy来验证。在收到数据后立即在服务器上记录并在解序列化之后记录,确保在这些点上有正确的数据。然后,如果所有这些都是正确的,请查看MySQL代码。如果仍有问题,请将日志结果添加到问题中。 – zaph 2014-10-31 04:01:25