gpt4 book ai didi

php - 从 Objective-C 发送的 JSON 数据未在 sql 表中更新

转载 作者:行者123 更新时间:2023-11-30 22:13:20 25 4
gpt4 key购买 nike

我有一个程序,该程序具有在程序启动时运行的功能,并且我通过 JSON 将数据发送到我的数据库。它寻找一个运行 PHP 脚本的 url 以将 JSON 数据插入数据库并且它运行良好。我的问题是,当程序关闭并运行解构器并调用 update.php 脚本时,它不会更新我的表行,而是向表中添加一个新行,而不会更改任何数据。我的控制台响应显示在每个相应的构造函数/解构函数中发送了正确的 JSON 数据,因此我知道正在发送正确的数据。任何可以为我指明正确方向的帮助,以说明为什么我的行没有更新,我们将不胜感激。

Objective-C 构造函数

NSString *strURL = @"mysite.com/insert.php";
NSURL *url = [NSURL URLWithString:strURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if ( request != nil ) {
NSDictionary *dict = @{ @"IP" : [self GetIP],
@"UUID" : [self GetUUID],
@"isActive" : @1};


NSError *error;

NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

NSString *jsonData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

NSData *requestData = [NSData dataWithBytes:[jsonData UTF8String]
length:[jsonData lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];

[request setHTTPMethod:@"POST"];
//[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestData];

// Send a synchronous request
NSURLResponse * response = nil;
NSError * NSURLRequestError = nil;

NSData * responseData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&NSURLRequestError];
if ( responseData != nil ) {
NSLog(@"responseData is valid.");

NSString *myString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"myString:\t%@", myString);
} else {
NSLog(@"responseData is nil!");
}
} else { // uh oh
NSLog( @"Error creating the URL request!" );
}

Insert.php(从构造函数调用的 php 脚本)- 完美运行

<?php

$host = "localhost";
$userid = "root";
$password ="password";
$database = "database";

// read JSON input

$handle = fopen("php://input", "rb");
$raw_post_data = '';
while (!feof($handle)) {
$raw_post_data .= fread($handle, 8192);
}
fclose($handle);

$request_data = json_decode($raw_post_data, true);

print_r($request_data);
// prepare header for reply

header("Content-Type: application/json");

// open database

$mysqli = new mysqli($host, $userid, $password, $database);

// check connection

if ($mysqli->connect_errno) {
echo json_encode(array("success" => false, "message" => $mysqli->connect_error, "sqlerrno" => $mysqli->connect_errno));
exit();
}

// perform the insert

$sql = "INSERT INTO table (IP,UUID,isActive) VALUES (?,?,?);";

if ($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param("ssi", $request_data["IP"], $request_data["UUID"], $request_data["isActive"]);

if (!$stmt->execute())
$response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate" => $mysqli->sqlstate);
else
$response = array("success" => true);

$stmt->close();
} else {
$response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate" => $mysqli->sqlstate);
}

现在程序关闭时,我有完全相同的析构函数代码。唯一的区别是 url 调用不同的 php 脚本来执行更新并且“isActive”更改为 0。

析构函数

NSString *strURL = @"mysite/update.php";
NSURL *url = [NSURL URLWithString:strURL];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
if ( request != nil ) {
NSDictionary *dict = @{ @"IP" : [self GetIP],
@"UUID" : [self GetUUID],
@"isActive" : @0};


NSError *error;

NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

NSString *jsonData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

NSData *requestData = [NSData dataWithBytes:[jsonData UTF8String]
length:[jsonData lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];

[request setHTTPMethod:@"POST"];
//[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestData];

// Send a synchronous request
NSURLResponse * response = nil;
NSError * NSURLRequestError = nil;

NSData * responseData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:&NSURLRequestError];
if ( responseData != nil ) {
NSLog(@"responseData is valid.");

NSString *myString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"myString:\t%@", myString);
} else {
NSLog(@"responseData is nil!");
}
} else { // uh oh
NSLog( @"Error creating the URL request!" );
}

Update.php(在析构函数中调用的 php 脚本)

$host = "localhost";
$userid = "root";
$password ="password";
$database = "database";

// read JSON input

$handle = fopen("php://input", "rb");
$raw_post_data = '';
while (!feof($handle)) {
$raw_post_data .= fread($handle, 8192);
}
fclose($handle);


// prepare header for reply

header("Content-Type: application/json");

// open database

$mysqli = new mysqli($host, $userid, $password, $database);

// check connection

if ($mysqli->connect_errno) {
echo json_encode(array("success" => false, "message" => $mysqli->connect_error, "sqlerrno" => $mysqli->connect_errno));
exit();
}

$request = json_decode($raw_post_data,true);

print_r($request);

foreach(json_decode(raw_post_data, true) as $item)
{
$IP = $item['IP'];
$UUID = $item['UUID'];
$isActive = $item['isActive'];

$query = "UPDATE table SET isActive= ? WHERE IP = ? AND UUID = ? ";
$statement = $mysqli->prepare($query);

$results = $statement->bind_param('sss', $isActive, $IP, $UUID);
$results = $statement->execute();
}


$mysqli->close();

最佳答案

在 INSERT 语句中,isActive 是一个整数。在 UPDATE 中,它是一个字符串,即使您使用 @0

将其作为数字发送

$results = $statement->bind_param('sss', $isActive, $IP, $UUID);

应该是:$results = $statement->bind_param('iss', $isActive, $IP, $UUID);

希望对您有所帮助。

关于php - 从 Objective-C 发送的 JSON 数据未在 sql 表中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39297618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com