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


Accessing a database located on another computer using PHP

我的客户有一个商业街商店的离线产品数据库,他们为了自己的目的经常更新。他们现在正在创建一个在线商店,希望使用该数据库中的产品信息。

将数据库迁移到托管服务器并放弃脱机数据库不是一种选择,因为它们当前的遗留软件设置。

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

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

我使用odbc连接对quickbooks做了类似的操作。使用它,我将数据同步到MySQL。然而,这种同步只是一种方式。除非你在数据中有指示何时更改(更新日期)的密钥,否则你最终会同步大量额外的数据。

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

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

在理想的情况下,我会考虑创建一个restful API,它将运行在与脱机数据库相同的服务器上,或者至少运行在相同的网络上。这个restful API将通过http作为web服务器运行,并从离线数据库返回JSON甚至XML数据结构。在互联网上运行的客户端可以随时连接并获取所需的任何数据。像这样的restful API有很多优点。

首先它是安全的。您不必通过将脱机数据库连接为公共数据库来向公众开放攻击向量。您唯一要做的就是启用对restful API的公共访问。在你的API逻辑中,你甚至可能不包括写入数据库的功能,所以即使你的API的安全性在最坏的情况下受到威胁,攻击者所能做的就是读取你的数据,而不是破坏它

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

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

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

所有这些的好处是,在脚本上编写API更加复杂。因此,在这种情况下,我相信马是理所当然的。如果这个数据库是一个长期项目的主干,这个项目将在未来扩展,那么API就是必经之路。如果这只是你项目的一小部分,那么也许你可以用一个每24小时运行一次的脚本来改变它,但我以前也这样做过,当我不得不更改/编辑解决方案的那一刻,事情就开始变得有点"棘手"了。希望这能有所帮助并祝你好运。