设计连接到数据库的应用程序

时间:2012-12-05 16:41:34

标签: php c++ iphone database

我创建了一个网站(php)并连接到数据库,因此它可以拥有用户和发布材料。想象它就像一个论坛。现在,我将如何制作连接到同一数据库的iPhone应用程序。我已经在教自己c ++来制作应用程序了,但我不确定如何将它连接到数据库。

5 个答案:

答案 0 :(得分:2)

要执行基于Web的数据库,最佳做法是使用对PHP脚本的HTTP请求。这样您就不必从应用程序建立数据库连接,从实际项目中排除用户名和密码。创建一些PHP脚本,通过发送POST和GET变量来完成所需的操作。

***根据我的经验和偏好

答案 1 :(得分:1)

您需要为所有可能的操作构建API端点。

发布/查看帖子/编辑帖子/添加

使用的流行且文档齐全的体系结构将是REST http://en.wikipedia.org/wiki/Representational_state_transfer

如果您使用的是PHP框架,通常会有用于创建API的辅助库

本教程应该可以帮助您理解它 http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/

答案 2 :(得分:1)

您只需设置RESTful webservice,然后通过Restkit在Obj-C上访问它。

编辑:顺便说一句,如果你没有花哨的应用程序需求,只需要make your website responsive,你就可以了。

答案 3 :(得分:0)

我是iphone开发的新手,已经在Iphone工作了一个月左右。想对此提出一些建议:

1)首先阅读Objective-C,因为你正在制作一个Iphone应用程序以及Xcode如何运作

2)接下来连接到Web API,您可以使用AFNetworking。这是一个Tutorial开始。您需要知道获取数据的API是什么。

3)接下来,您需要根据API中的JSON或XML数据来解析数据。这将允许您获取数据。

4)您现在可以使用UI

在Xcode中显示

答案 4 :(得分:0)

您的应用可以通过向服务器上的URL发出HTTP请求来连接到您的服务。您可以使用您喜欢的任何后端,我个人使用PHP与MySQL,因为几乎所有托管服务都将支持这些工具。您可以通过定义执行功能的URL来形成查询。通常,您希望在更改服务器上的数据时使用POST请求,并在进行只读信息请求时使用GET请求。

您必须小心设计您的URL和服务器以防止未经授权的访问,我不会在此描述详细信息,但网络上有很多关于此的建议。我将重点介绍如何使用网址连接到您的服务。

我建议使用有助于发送请求和接收响应的库。回来(大约一年前),当我积极研究这样做的应用程序时,我使用了免费提供的AsiHTTPRequest库,但我现在看到作者已停止对它的支持。我的0.02美元:它适用于我的应用:http://allseeing-i.com/ASIHTTPRequest/

有两部分:1)发送请求,2)接收和处理响应。您通常希望确保异步发出请求,以便在请求通过Internet时,您的应用程序不会冻结,服务器会处理请求,并且您会收到响应。

为了便于解析结果,请让您的Web应用后端以Apple plist格式发送响应。或者你可以使用XML,但我喜欢plist,因为对它的支持已经融入了SDK。

以下是我的应用中执行此操作的代码:

// this allows you to switch between the "live" web service and a local development copy
#ifndef _USE_LOCAL_SERVER_
#define kAppCustomerInfoURL @"https://mysite.com/path/to_my/service/"
#else
#define kAppCustomerInfoURL @"http://localhost/path/to_my/service/"
#endif

NSURL *url = [NSURL URLWithString:kAppCustomerInfoURL];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
// udm is my singleton that holds properties for the current user
[request setPostValue:[udm getProperty:kNameProperty] forKey:@"name"];
[request setPostValue:[udm getProperty:kPhoneProperty] forKey:@"phone"];
[request setPostValue:[udm getProperty:kEmailProperty] forKey:@"email"];
[request setPostValue:[udm getProperty:kCityProperty] forKey:@"city"];
[request setPostValue:[udm getProperty:kAddressProperty] forKey:@"address"];
[request setPostValue:[udm getProperty:kDeliveryNotesProperty] forKey:@"comments"];
[request setPostValue:[NSString stringWithFormat:@"%u", arc4random()] forKey:@"random"];

[request setValidatesSecureCertificate:NO];
[request setDelegate:self];
[request startAsynchronous];

您的对象需要实现requestFinished:和requestFailed:methods:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSString *response = [request responseString];

    NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
    NSPropertyListFormat format;
    NSString *errorStr;
    NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                                                           mutabilityOption:NSPropertyListImmutable 
                                                                     format:&format 
                                                           errorDescription:&errorStr];
    if ( ! plist ) 
    {
        // NSLog( @"Error: %@", errorStr );
        [errorStr release];
        return;
    }

    for ( NSString *key in [plist allKeys] )
    {
         if ( [key isEqualToString:@"result"] )
         {
              NSString *resultStr = [plist objectForKey:@"result"];
              if ( ! [resultStr isEqualToString:@"ok"] )
              {
                   // set an error
              }
         }
        // more cases 
     }
}

这是我的响应失败方法,它设置一些应用程序状态并发送请求已完成的通知,应用程序的其他部分可能会在请求完成时用于更新自己:

- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog( @"update customer info failed: %@", [error localizedDescription] );

    self.syncDataToServerOK = NO;

    [[NSNotificationCenter defaultCenter] postNotificationName:kUserDataSyncFinishedNotification object:nil];
}