【问题标题】:How to query an external SQL database - iPhone app如何查询外部 SQL 数据库 - iPhone 应用程序
【发布时间】:2011-07-05 17:20:48
【问题描述】:

我之前在 iPhone 应用程序中使用过 sqlite3,但是如何查询到位于我网站上的外部 SQL 数据库?

【问题讨论】:

    标签: iphone sql ios sqlite


    【解决方案1】:

    您的应用不执行实际查询。执行此操作的正确方法是为您的网站设置一个 API,以便该网站进行查询并将适当的数据返回到您的应用程序。

    您的 API 通常由多个端点组成,这些端点返回为您的应用格式化的数据。例如,您可以创建一个 PHP 或 Python 页面,在数据库中查询给定用户的所有帖子,并以 JSON 或 XML 编码数组的形式返回它们。 (数据格式完全由你决定。有用于解析这两种格式的框架可用于 iOS。)

    例如,假设您的服务器上有一个返回星期几的 PHP 页面。你的 PHP 看起来像这样:

    <?php
      echo date("l");
    ?>
    

    假设您已将其保存为 http://example.com/dayoftheweek.php

    我建议使用ASIHTTPRequest 框架在您的应用程序中执行 HTTP 请求。也就是说,让我们继续设置到您的 PHP 页面的连接。假设您在项目中设置了所有 ASIHTTPRequest,请求可能如下所示:

    NSURL *url = [NSURL URLWithString:@"http://example.com/dayoftheweek.php"]
    ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:url];
    [request setDelegate:self];
    

    现在,您需要实现 ASIHTTPRequest 委托方法,以解析返回的数据。处理完成请求的方法如下所示:

    - (void)requestFinished:(ASIHTTPRequest *)request{
       //Here you would store the returned data and/or parse it
    }
    

    要实现 API,您的 PHP 页面会更加复杂。您将构建一个更复杂的请求,传入变量等,PHP 页面将像常规 Web 服务一样,返回您请求的数据。

    【讨论】:

    • 但是什么类型的http请求呢?我究竟如何制作 API?那是PHP吗?这样做的一个例子是什么?
    • 我不认为他真的需要重复的答案。
    • @StanLe - 我已经更新了一个基本示例。 @pt2ph8 - 我也不这么认为,这就是我更新答案的原因。 ;-)
    • 很好的例子。我真的很感激。我唯一不确定的是:在 PHP 中,我如何“返回”数据?我只在屏幕上打印过数据。
    • @StanLe - 这正是您将要做的,只是您可以在 XML 标记或 JSON 包装器中打印它。
    【解决方案2】:

    我认为您的意思是 MySQL。通常禁止从外部访问 MySQL 数据库,这是有充分理由的。您可能想要编写一个访问您的数据库的 API。您的 iPhone 应用将与此 API 通信以插入和检索数据。

    【讨论】:

    • 那么什么样的API?我会做一些php脚本之类的吗?
    • 是的。您可以做的最简单的事情是一个 PHP 脚本,它根据您传递给它的参数返回 JSON 或 XML 格式的数据。然后,您使用 ASIHTTPRequest 以及周围的众多 JSON 和 XML 库之一(我推荐 YAJL 用于 JSON 和 GData 用于 XML)从您的应用程序中解析该数据并对其进行处理。
    • 您可以使用网络服务。假设您想从服务器数据库中获取某个用户的 ID。为此,可以有一个 Web 服务 API -(NSNumber*)IDForUserWithName:(NSString*)username。此调用将转到您的服务器,该服务器在内部获取从数据库传入的用户名的 ID。
    • @subhash 我想我能够弄清楚如何制作一个接受查询的 php 文件,甚至对我的 MySQL 数据库进行查询。但我担心的是:我将如何包装这些结果并在 Objective-C 中阅读它们。事物的 Objective-C 方面会是什么样子。我之前做过 SQL 查询,但是已经将它们打印到电脑屏幕上......
    • @StanLe,你是如何从你的应用程序与服务器通信的。您正在发送简单的 http 请求或基于肥皂的 Web 服务?如果您使用的是简单的 http 请求,您会以哪种格式获得响应?是 XML 格式的吗?
    【解决方案3】:

    用于与任何外部数据库进行通信的方法是通过 Web 服务(我们在此将其称为 API)。您向服务器发出请求,这通常是服务器上的函数调用,服务器用请求的数据回复您。

    您可以通过This。就PHP和其他相关术语而言,您将不得不付出一些努力并google一些代码。 This 也有一些用处。通常,为 iPhone 编写的 Web 服务使用 iPhone 的 XML/JSON。 JSON/XML 解析器可用

    【讨论】:

      【解决方案4】:

      @StanLe:您不能直接在本机应用程序中使用 SQL Server 或 mySQL。但是,您可以通过以下方式将您的应用程序与外部 SQL 数据库通信。

      1. 使用 PHP、C# 或任何在结果中提供 XML 文件的工具创建 XML API。
      2. 在xcode中使用一些解析器(NSXMLParser),可以读取XML页面的标签。

      这里是example

      这里是sample Code

      另一个非常Simple Example

      如果仍有任何困惑,请回信。

      【讨论】:

      • 我对PHP有点熟悉,之前用PHP做过SQL查询。唯一让我担心的是我已将查询结果打印到控制台(到计算机屏幕)。我将如何包装这些结果并在 Objective-C 中阅读它们?
      • 你能告诉我一些细节,比如你使用的是什么数据库和平台,你想在原生应用中看到什么样的结果?
      • 优秀的链接。我唯一坚持的是如何在我的服务器上运行一个 php 文件,例如来自 Objective-c 的 www.mysite.com/myfile.php 并返回结果。我希望能够运行带有特定输入(例如名称)的 php 文件,该输入将用于查询数据库。然后 PHP 将从我的 MySQL 数据库中返回一行。然后我的 Objective-C 就会得到这个结果。
      猜你喜欢
      • 1970-01-01
      • 2019-03-18
      • 2017-11-24
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多