0

我需要为用 PHP 7 编写的网站从 MS Access 2007(mdb 和 accdb 文件)中提取数据。这些页面不需要是动态的或交互式的。他们只需要呈现存储在数据库中的数据。

本地开发环境:Windows 7、IIS 7.5

在线服务器:A2 Hosting, Linux (CloudLinux Server release 6.9), Apache/2.2.34

Access的ADOdb 网页显示“Windows 是,Unix 否”。我想这意味着我可以在本地环境中使用 ADOdb 连接到 Access,但不能在在线服务器上。我想我有以下选择:

  • StackOverflow 对此(123)有一些问题,并提供了用于在 PHP 中连接到 Access 的代码的答案。虽然答案没有这么说,但我猜该代码只能在 Windows 中运行,因为如果在 Unix 中连接到 PHP 中的 Access 很容易,那么 ADOdb 就可以了!因此,如果我对此是正确的,那么这不是一个可行的选择。
  • PHP 手册有一个关于数据库问题的页面说 PHP 可以访问 Access,但它似乎只适用于在 Windows 中运行或“在 Unix 机器上运行 PHP 并希望在 Windows 机器上与 MS Access 对话”。因此,这似乎也没有为在 Linux 服务器上在线运行网站提供可行的解决方案。
  • 将所需的数据库部分提取到可以在 Unix 中访问的其他内容中,例如 CSV 文件,并将其用作网站的数据库。如果我使用 CSV 执行此操作,我想我不需要 ADOdb,而只会使用fgetcsv()。这是一个不优雅的解决方案,但如果没有办法在 Unix 中直接访问 Access,这可能是最好的选择。(我可以使用 MySQL 而不是 CSV,但这似乎是很多不必要的开销。)
  • 使用 ADOdb 在我的 Windows 机器上运行页面以访问 Access。将来自数据库的页面部分保存为单独的 HTML 段文件,并在页面在线运行时包含()它们。(脚本可以检测它在哪个环境中运行,如果它是本地的,则访问数据库,如果在线,则包含() HTML 段文件。)
  • 将在线网站从 Linux 移动到 Windows 服务器,以便 PHP 可以直接使用 ADOdb 访问 Access。
  • 将整个数据库从 Access 转换为其他数据库,例如 MySQL。目前这是不切实际的,尽管这可能是未来的一种选择。

我是否正确理解了我的选择?我已经按照我认为的偏好顺序列出了它们,所以除非有人另有建议,否则我想我会使用第三个(提取到 CSV,使用 fgetcsv(),没有 ADOdb),因为前两个不会工作。

谢谢你的帮助。

4

2 回答 2

0

您不需要将 Access 中的“整个数据库”转换为使用 Mysql,只需转换表即可。然后,您可以使用 MySql odbc 连接器将它们链接回 Access 数据库,只要表名相同,您甚至不会注意到差异,您的所有表单、查询和一切都会正常工作。

然后,您将在本地计算机上运行 MySql 服务器,如果您创建一个具有正确权限的用户并通过您的路由器进行端口转发(将流量从端口 3306 或您分配给服务器的任何端口引导到您的计算机)并允许通过防火墙的流量,您的网站就可以访问、读取和写入您的数据库。

如果你想从 php mysqli_query 查询数据库就可以了。大多数从数据运行的网站都使用 MySql 运行,因此这也是一个面向未来的解决方案。

于 2018-08-27T02:56:41.270 回答
0

主要问题是 ODBC 驱动程序。{Microsoft Access Driver (*.mdb, *.accdb)}附带 Microsoft Access 或 Microsoft Access 数据库引擎,它们都是仅适用于 Windows 的。

但是,还有可在 Unix 和 unixODBC 上运行的替代 ODBC 驱动程序。一种流行的开源工具是mdbtools,它是有限的,但可用于使用 PDO 和 ODBC 将 Access 连接到 unix 上的 PHP。还有一些功能更全面的商业替代品。

一旦你完成了这项工作,在 PHP 中使用 ODBC 驱动程序应该不会有问题。请注意,在共享主机上,这可能是不可能的。

或者,您可以将php-jdbc 桥UCanAccess一起使用。这可能仍然是全开源的,并且比 mdbtools 功能更全面,但正确设置更复杂。

于 2018-07-30T14:04:06.543 回答