php - Unix 中 PHP 中的 MS Access 怎么办?
问题描述
我需要为用 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 对此(1、2、3)有一些问题,并提供了用于在 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),因为前两个不会工作。
谢谢你的帮助。
解决方案
您不需要将 Access 中的“整个数据库”转换为使用 Mysql,只需转换表即可。然后,您可以使用 MySql odbc 连接器将它们链接回 Access 数据库,只要表名相同,您甚至不会注意到差异,您的所有表单、查询和一切都会正常工作。
然后,您将在本地计算机上运行 MySql 服务器,如果您创建一个具有正确权限的用户并通过您的路由器进行端口转发(将流量从端口 3306 或您分配给服务器的任何端口引导到您的计算机)并允许通过防火墙的流量,您的网站就可以访问、读取和写入您的数据库。
如果你想从 php mysqli_query 查询数据库就可以了。大多数从数据运行的网站都使用 MySql 运行,因此这也是一个面向未来的解决方案。
推荐阅读
- c++ - 使用 Arpack EigenLibrary Wrapper 处理小矩阵的奇怪行为
- google-analytics - 获取 Google Analytics(分析)帐户货币
- mysql - MySQL - 列出对话
- oracle - ORACLE中的分区表自动重命名
- regex - 排除大括号匹配
- javascript - [Vue 警告]:nextTick 中的错误:“TypeError:Range.setStart 的参数 1 未实现接口 Node。”
- mysql - 如何将一个查询结果传递给另一个?
- reactjs - 切换到另一个链接时如何更改另一个组件中的组件?
- java - 将手动创建的 JSONObject 的内容传递给 Jackson
- javascript - 如何获取可编辑表中的数据以通过 AJAX 发送?