使用PHP访问位于另一台计算机上的数据库

时间:2013-02-05 22:02:02

标签: php local schedule

我的客户有一个针对高街商店的离线产品数据库,他们为了自己的目的而频繁更新。他们现在正在创建一个他们想要使用此数据库中的产品信息的在线商店。

由于其当前的旧版软件设置,将数据库迁移到托管服务器并放弃脱机数据库不是一种选择。

所以我的问题是:如何从离线数据库获取信息到在线数据库?他们的本地服务器总是连接到互联网,所以有可能在网站上创建一个脚本,以某种方式从他们的服务器抓取数据并将其导入到在线服务器?如果每24小时运行一次,那将是完美的。但它甚至可能吗?如果是这样,我该怎么做?

我能想到的唯一其他选择是在每次更新后手动上传数据库,但这不是一个可行的想法。

2 个答案:

答案 0 :(得分:1)

我使用odbc连接使用quickbooks做了类似的事情。使用它我将数据同步到MySQL。然而,这种同步只是一种方式。除非您在数据中有密钥指示某些内容已更改(更新日期),否则您将最终同步大量额外数据。

使用SQLYog,我设置了一个连接到odbc数据源的预定作业,并将上次同步后的更改推送到我用来生成报告的mysql数据库。如果您可以将数据复制到MySQL中,那么在这一点上应该很容易在您的在线商店中使用它。

缺点是它不会是实时的。库存可能会成为一个问题。

答案 1 :(得分:1)

在理想的世界中,我会考虑创建一个可以在同一台服务器上运行或至少与您的脱机数据库在同一网络上运行的REST。这个安静的API将通过http作为Web服务器运行,并返回JSON甚至来自脱机数据库的XML数据结构。在互联网上运行的客户端可以随时连接和获取他们需要的任何数据。像这样的宁静API具有许多优点。

首先它是安全的。您不必通过公开与脱机数据库的连接向公众开放攻击媒介。您唯一需要做的就是允许公共访问您的restful API。在您的API逻辑中,您甚至可能不包含写入数据库的功能,因此即使您的API的安全性在最坏的情况下受到攻击,所有攻击者都可以读取您的数据,而不是破坏它。

在这种情况下拥有一个安静的api代表了一个良好的关注点分离。您的客户端代码不应该知道有关数据库的任何信息,也不应该知道脱机数据库使用的任何内部系统。当您的客户想要更新他们的离线系统甚至更改它时会发生什么?在这种情况下,您所要做的就是更新restful api。连接到数据的客户端不再关心其他任何事情,除了api这样改变的数据库很容易。

考虑API的另一个原因是并发性。我之前暗示过这一点,但如果您需要让多个客户端访问脱机数据库的数据,那么拥有API会很棒。在Web服务器设置中,您将拥有API并等待请求,因此没有理由不能同时连接到api的多个客户端。 HTTP真的很擅长这个!

您谈到过必须将旧数据放入新数据库中。使用restful API可以轻松完成这样的事情,因为您只需要将API的端点映射到新数据库中的表,并在需要时运行它。您甚至可以放弃新数据库并使用API​​作为后端。这个解决方案需要一些缓存,但如果您觉得不需要,它会减少数据库的重复。

回归所有这一点是在脚本上编写API更复杂。所以在这种情况下我相信马匹的课程。如果这个数据库是未来将扩展的长期项目的支柱,那么API就是最佳选择。如果它是你项目的一小部分,那么也许你可以用一个每24小时运行一次的脚本来摆动它,但是我之前已经完成了这个,第二个我必须改变/编辑解决方案,事情开始变得有点“毛茸茸”。希望这有助于并带来好运。