我用谷歌搜索并找不到任何简单的解决方案来做到这一点。我知道向 PHP 发送 SQL 查询是不好的做法,但由于只能在本地访问数据库,所以我现在不必担心安全问题。
我有一个需要 SQL 查询作为参数的函数。通过这个 SQL 查询,我想将它发送到 PHP 以获取结果。现在唯一的问题是如何将字符串发送到 PHP。
到目前为止,我的测试 Objective-C 代码如下所示:
void aFunction(std::string query)
{
NSString *dictQuery = [NSString stringWithCString:query.c_str() encoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"query", dictQuery, nil];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
if (error)
{
NSLog(@"%s: JSON encode error: %@", __FUNCTION__, error);
}
NSURL *url = [NSURL URLWithString:@"http://localhost/test.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *params = [NSString stringWithFormat:@"json=%@", [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *paramsData = [params dataUsingEncoding:NSUTF8StringEncoding];
// receive return value
...
}
测试.php:
<?php
$http_raw_post_data = $_POST['json'];
$post_data = json_decode(stripslashes($http_raw_post_data),true);
if (is_array($post_data))
$response = array("status" => "ok", "code" => 0, "original request" => $post_data);
else
$response = array("status" => "error", "code" => -1, "original_request" => $post_data);
include 'database.php';
$connection = mysql_connect(SERVER, USER, PASSWORD);
mysql_select_db(DATABASE, $connection);
if (!$connection)
{
die("Couldn't connect: " . mysql_error());
}
$sql = $post_data;
$result = mysql_query($sql, $connection);
if (!$result)
{
die("Error getting results: " . mysql_error());
}
while (($row = mysql_fetch_row($result)))
{
$array[] = $row;
}
mysql_close($connection);
echo json_encode($array);
?>
检查结果后,正在发送的字符串返回:json=%7B%22select%20*%20from%20items%22:%22query%22%7D
。我怎样才能解决这个问题?