通过PHP访问SQL数据库?

时间:2011-04-23 17:51:27

标签: php mysql sql objective-c

我是PHP& amp;的新任开发人员。 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做一些事情。这是一个很好的方法吗?

2 个答案:

答案 0 :(得分:1)

下载整个数据库并使用更改上传它可能对性能(和安全性)原因没有意义。

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

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

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

答案 1 :(得分:1)

您可以结合使用JavaScript / PHP和WebKit的Web脚本功能。 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

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

有道理吗?