Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何修改我的php Web服务来处理一个调用而不是多个调用?_Php_Ios_Database - Fatal编程技术网

我应该如何修改我的php Web服务来处理一个调用而不是多个调用?

我应该如何修改我的php Web服务来处理一个调用而不是多个调用?,php,ios,database,Php,Ios,Database,我有一个iOS应用程序,它使用以下方法从Web服务获取用户点: +(void)fetchPointsForUser:(NSString*)usuario WithCompletionHandler:(Handler2)handler{ NSURL *url = [NSURL URLWithString:@"http://myserver.com/myapp/readpoints.php"]; NSDictionary *postDict = [NSDictionary dicti

我有一个iOS应用程序,它使用以下方法从Web服务获取用户点:

+(void)fetchPointsForUser:(NSString*)usuario WithCompletionHandler:(Handler2)handler{
    NSURL *url = [NSURL URLWithString:@"http://myserver.com/myapp/readpoints.php"];
    NSDictionary *postDict = [NSDictionary dictionaryWithObjectsAndKeys:usuario, @"userNa", nil];

    NSData *postData = [self encodeDictionary:postDict];

    // Create the request
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:[NSString stringWithFormat:@"%d", postData.length] forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    __block NSArray *pointsArray = [[NSArray alloc] init];

    dispatch_async(dispatch_get_main_queue(), ^{
        // Peform the request
        NSURLResponse *response;
        NSError *error = nil;
        NSData *receivedData = [NSURLConnection sendSynchronousRequest:request
                                                     returningResponse:&response
                                                                 error:&error];
        if (error) {
            if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
                NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
                NSLog(@"HTTP Error: %d %@", httpResponse.statusCode, error);
                return;
            }
            return;
        }

        NSString *responseString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];

        pointsArray = [NSJSONSerialization JSONObjectWithData:[responseString dataUsingEncoding:NSASCIIStringEncoding] options:0 error:nil];

        if (handler)
            handler(pointsArray);
    }); 

}
但是这是非常昂贵的,因为我基本上是通过usersArray枚举,每次都将单个用户发送到这个类方法。所以我想我应该修改我的Web服务来处理一个不同的请求,我把它发送到字典中,而不是单个用户

我目前使用的php如下所示:

<?php

include_once("JSON.php");
$json = new Services_JSON();

$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");
mysql_select_db("mydb") or die("Could not select database");

$username = $_POST["userNa"];
$result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username='$username' GROUP BY username");


// Print out result
while($row = mysql_fetch_array($result)){
    echo $row['SUM(points)'];
}

// THIS RETURNS ARRAY NOT READ PROPERLY BY iOS JSON
$resultado = array();
while($obj = mysql_fetch_object($result)) {
    $resultado[] = $obj;
}
Echo $json->encode($resultado);

?>

如果我错了,请纠正我

您有一个web服务—输入值为“UserName”,输出值为该用户名对应的点数。您有一个用户名列表,因此必须逐个调用此web服务

为什么不将您的web服务更改为:输入值为“用户名列表”,输出值为“点数列表”?它将允许您的应用程序只调用web服务一次。但您需要在iOS中更改web服务调用函数

在web服务(PHP)中,mysql_查询基本上是一个字符串,您可以根据输入(用户名列表)和所需的返回数据以编程方式生成mysql_查询字符串

我不是回答php脚本的合适人选,但我可以给出一些如何创建查询字符串的想法。下面的代码只是一个想法

//You have a list of Username - $array
//If array count is zero then just return
//If array has data then do the follow logic
//Generate your Query string programmatically
$query_string = "SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username = ".$array[0] ;

for ($i = 1; $i < count($array); $i++){
    $query_string .= " OR username=".$array[$i];
}

$query_string .= " GROUP BY username";

//print your query string and try it from PHP Admin, If it runs OK then you create it successfully

$result = mysql_query($query_string);
//$result is here is nothing but a result table
//Then return it using json format
//您有一个用户名列表-$array
//如果数组计数为零,则返回
//如果阵列有数据,则执行以下逻辑
//以编程方式生成查询字符串
$query_string=“从username=“.$array[0]”的标记中选择用户名、总和(点数)作为punto;
对于($i=1;$i

希望这能对你有所帮助。

如果我错了,请纠正我

您有一个web服务—输入值为“UserName”,输出值为该用户名对应的点数。您有一个用户名列表,因此必须逐个调用此web服务

为什么不将您的web服务更改为:输入值为“用户名列表”,输出值为“点数列表”?它将允许您的应用程序只调用web服务一次。但您需要在iOS中更改web服务调用函数

在web服务(PHP)中,mysql_查询基本上是一个字符串,您可以根据输入(用户名列表)和所需的返回数据以编程方式生成mysql_查询字符串

我不是回答php脚本的合适人选,但我可以给出一些如何创建查询字符串的想法。下面的代码只是一个想法

//You have a list of Username - $array
//If array count is zero then just return
//If array has data then do the follow logic
//Generate your Query string programmatically
$query_string = "SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username = ".$array[0] ;

for ($i = 1; $i < count($array); $i++){
    $query_string .= " OR username=".$array[$i];
}

$query_string .= " GROUP BY username";

//print your query string and try it from PHP Admin, If it runs OK then you create it successfully

$result = mysql_query($query_string);
//$result is here is nothing but a result table
//Then return it using json format
//您有一个用户名列表-$array
//如果数组计数为零,则返回
//如果阵列有数据,则执行以下逻辑
//以编程方式生成查询字符串
$query_string=“从username=“.$array[0]”的标记中选择用户名、总和(点数)作为punto;
对于($i=1;$i

希望这能对您有所帮助。

有关向PHP脚本提交JSON请求的示例,请参阅。这正好使用字典,但如果您愿意,也可以使用数组(或嵌套字典和数组的某种组合)。另外,您可能不应该将同步请求分派到主队列。这正是应该分派到后台队列的类型。我建议将其分派到后台队列,但随后可能分派
处理程序(pointsArray)返回到主队列。或者使用
sendAsynchronousRequest
而不是
sendSynchronousRequest
,并完全摆脱
dispatch\u async
。@Rob thx获取所有帮助。我把我的新问题贴在这里。基本上是php循环来查询数据库并返回一个新的数组对象:参见向php脚本提交JSON请求的示例。这正好使用字典,但如果您愿意,也可以使用数组(或嵌套字典和数组的某种组合)。另外,您可能不应该将同步请求分派到主队列。这正是应该分派到后台队列的类型。我建议将其分派到后台队列,但随后可能分派
处理程序(pointsArray)返回到主队列。或者使用
sendAsynchronousRequest
而不是
sendSynchronousRequest
,并完全摆脱
dispatch\u async
。@Rob thx获取所有帮助。我把我的新问题贴在这里。基本上是php循环来查询数据库并返回一个新的数组对象:谢谢@brianlikeaple,这正是我想做的,但我不是php专家,所以我来了:)到目前为止,Rob帮我传入了一个数组,并在服务器端接收它。我现在需要在php中解析该数组以进行db获取,我不知道该怎么做。如何编写php代码以获取许多用户的点?我是否创建for循环并以某种方式为每个用户运行查询?或者我可以用数组进行查询吗?我更新了答案,但这只是一个想法。两年前我用过PHP,从那以后我就一点也不碰它了。现在,我正在为我的iOS应用程序使用WCF web服务,并使用类似的方式,它工作得非常好。thx,您的原始代码实际上工作正常。我只是还没来得及接受答案。谢谢@brianlikeaple,这正是我想要做的,但我不是php专家,所以我来了:)到目前为止,Rob帮我传入了一个数组,并在服务器端接收它。我现在需要在php中解析该数组以进行db获取,我不知道该怎么做。H