【问题标题】:Access SQL database through PHP?通过 PHP 访问 SQL 数据库?
【发布时间】:2011-04-23 17:51:26
【问题描述】:

我是 PHP 和 SQL 领域的新开发人员。到目前为止,我只做过 Objective-C 编程。然而,我的一个项目要求我有一个在线数据库,我需要从我的应用程序中访问它。我打算使用MCPKit 框架来远程访问我的数据库,如下所示:

MCPConnection *db;
db = [[MCPConnection alloc] initToHost:@"db.something.com" withLogin:@"someuser" usingPort:3306];
[db setPassword:@"somepass"];
NSLog(@"Connect: %d", [db connect]);

但这不起作用,因为我联系了我的托管服务提供商,他们已经设置好了,因此我无法从外部主机访问我的数据库(出于安全考虑)。所以,我将不得不寻找替代品。我唯一能想到的就是在我的服务器上设置一个 PHP 脚本,该脚本将下载整个数据库并将其作为 .sql 文件提供给我,然后我可以对其进行操作。

但是,我不知道从哪里开始。我发现你可以像这样在 PHP 中访问数据库:

$mysql = new MySQLi('db.something.com', 'someuser', 'somepass', 'mydb')
$mysql->query("SELECT * FROM `something`");

但是我没有尝试过这个,我不知道如何访问这个结果。

为了简化问题,我想知道如何访问远程数据库并让 PHP 脚本将数据库作为文件发送给我,我可以在我的 Cocoa 应用程序中对其进行操作。

事实上,如果运行 PHP 脚本可以在内部 Cocoa 应用程序中完成,那就更棒了。想法?


好吧,我最终这样做了:

<?PHP
$con = mysql_connect("db.something.com","someuser","somepass");
if (!$con){die('Could not connect: ' . mysql_error());}
mysql_select_db("db", $con);
$result = mysql_query("SELECT * FROM table");
if(mysql_num_rows($result)) {
    while($device = mysql_fetch_assoc($result)) {
      $devices[] = $device;
    }
  }

header('Content-type: application/json');
echo json_encode($devices);
mysql_close($con);
?>

一旦运行,我就可以对生成的 JSON 进行处理。这是一个好方法吗?

【问题讨论】:

  • 你说的是 MySQL,对吧?
  • 如果它应该在线,你为什么要尝试下载整个数据库?如果它应该是在线的,那么设置一个可以从 C 应用程序访问的 API 会更有意义。
  • @prodigitalson:是的,我希望能够直接从我的应用程序中访问它。但是,我的托管服务提供商声称我不能这样做,因为他们不允许外部连接到数据库。 ://
  • @sudo 他们是对的。通过公共网络运行 mySQL 流量既慢又危险,而且您通常最终不得不为数据库用户提供比应用程序用户应有的更多权限。使用直接 mySQL 连接,您必须假设设备的用户可以操作到达服务器的 SQL 语句。
  • @sudo:您误解了..您将在远程服务器上创建一个可以访问数据库的 Web 应用程序,然后您将使用远程应用程序的 api 从数据库获取和发送信息,例如通过制作使用要存储的数据放置或发布 http 请求,或对所需的数据发出 get 请求。

标签: php mysql sql objective-c


【解决方案1】:

出于性能(和安全)原因,下载整个数据库并将其与更改一起上传可能没有意义。

通常会做的是用 PHP 或其他可以从您的 iOS 应用程序调用的服务器端语言设置 API,并为您执行操作。

我没有使用它们的经验,因此我无法判断它们的完整性和稳健性,但是有现成的 PHP API 可以将 mySQL 操作转换为 REST 操作,例如phprestsql。也许这适合你;但是请注意,您始终需要解决身份验证问题。如果您的 API 具有写入权限(或对敏感材料的读取权限),您需要采取措施阻止 Internet 上的每个人访问该 URL。

编辑:如果只是轮询一组定义的数据,您可能最容易使用标准的 PHP“查询表并循环输出内容”脚本(最好使用 PDO),并返回 json_encode()d 结果。

【讨论】:

  • 好吧,我不会上传数据库,它基本上是一个只读操作。我只需要每小时访问一次里面的东西。但是是的,您提供的 RESTful 链接看起来不错。
  • @Pekka:这变得越来越复杂,我所希望的。我希望只是一个简单的脚本来下载我的数据库,但我想它不是那么简单,是吗? :)
  • @sudo nope,对不起 :) 但最终,它可能会比现在看起来更简单。也许@Björn 的链接会有所帮助,我相信您不是第一个遇到此问题的 iOS 开发人员,因此可能已经存在一些公认的做法
  • @Pekka:我相信其他人也遇到过同样的问题。一般来说,我实际上是编程新手。我只做了一年左右。所以你明白这看起来有点压倒性。 :)
  • @sudo 看起来不错。请记住,如果您开始接受 URL 中的参数,则需要在使用 php.net/mysql_real_escape_string 的查询中使用它们之前对它们进行转义
【解决方案2】:

您可以结合使用 JavaScript/PHP 和 WebKit 的网络脚本功能。 Apple 在 Mac OSX 文档中有它:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/Tasks/JavaScriptFromObjC.html 和这里:http://developer.apple.com/library/mac/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/ObjCFromJavaScript.html#//apple_ref/doc/uid/30001215-BBCBFJCD

我的基本想法是,您设置一个在数据库上运行查询的 PHP 脚本,该脚本将通过使用 AJAX 的 JavaScript 函数调用。这个 JS 函数会被 Objective-C 调用,你的 JavaScript 可以调用一个回调函数将结果交给你的 Obj-C 代码。

有道理吗?

【讨论】:

  • 这是有道理的,当然。这听起来也是一个不错的方法。但我不知道从哪里开始。我不是要求某人为我编写我的整个方法,但我真的不知道如何继续下去。网上有没有例子可以帮助解释这一点?
  • 你需要哪一部分的例子?对于 PHP 部分?还是从 Obj-C 和 Obj-C 访问 JavaScript 到 JavaScript?
  • örn:他们两个,真的。但是,如果您只能找到其中一个也有帮助。
  • 对于查询部分,这应该会有所帮助 stackoverflow.com/questions/383631/json-encode-mysql-results 我没有“从 Objective-C 部分访问 JavaScript”的示例,但 Apple 文档应该可以帮助您
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多