在 Linux 上从 php 连接到 MS Access 远程 .mdb 文件

发布于 2024-11-08 20:29:39 字数 611 浏览 0 评论 0原文

我已经在互联网上挖掘了几天,阅读了非常古老的信息,这导致了非常古老且不存在的网站,但我仍然明白,实现我的目标需要什么。

  1. 我们在运行 WindowsXP 的服务器上有一个 file.mdb,因此我需要将其添加到 ODBC 数据源。我通过简单的步骤做到了这一点,最终得到“系统 DSN”,它允许访问 .mdb 文件,
  2. 我需要在同一台服务器上安装某种 ODBC 桥,这将允许我创建到该服务器的远程连接,使得该桥连接到服务器 ODBC DSN,并查询我的东西(找不到任何免费的 ODBC 桥)
  3. 在 UNIX (FreeBSD) 计算机上,我需要安装 unixODBC 和 php5-odbc 包,启用与 ODBC 的连接(已安装)
  4. 要连接到远程 ODBC 并使用 MS Access 数据库驱动程序,我需要在 .so 文件中拥有这样一个用于 unixODBC 的驱动程序,该驱动程序位于 UNIX 计算机内(无法找到任何免费的 MS Access 驱动程序)
  5. 使用 PHP odbc_connect 连接到该服务器(DSN,用户,密码),在DSN中我需要提供一些连接信息和驱动程序,我需要使用它们(MS Access驱动程序)。

纠正我,如果我错了,请给我更多建议,如何实现这样的连接。

I have been digging internet for couple days, reading very old information, that leads to very old and nonexisting sites, still, I understood, what is needed to achieve my goal.

  1. We have a file.mdb on server running WindowsXP, so I need to add it to ODBC data sources. I do that with simple steps, ending up with "System DSN", that allows access to that .mdb file
  2. I need to install on this same server some sort of ODBC bridge, that would allow me to create remote connection to this server, making that bridge connect to servers ODBC DSN, and query out my stuff (could not find any free ODBC bridge)
  3. On UNIX (FreeBSD) machine, I need to install unixODBC and php5-odbc packages, enabling connections to ODBC (already installed)
  4. To connect to remote ODBC and use MS Access db driver, I need to have such a driver for unixODBC, in .so file, that is sitting inside UNIX machine (could not find any free MS Access drivers)
  5. Connect to that server using PHP odbc_connect(DSN,user,password), and in DSN I need to give some connection information and driver, which I need to use (MS Access driver).

Correct me, if I'm mistaken and please give me more advice, how to achieve such a connection.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

素食主义者 2024-11-15 20:29:39

最后,我找到了解决方案。

  1. 在Win服务器上设置FreeSSHd,配置连接帐户并设置目录为1,需要
  2. 在unix服务器上设置sshfs
  3. 使用.mdb文件挂载Win服务器目录< /p>

    sshfs {user}@:/ {unix 挂载点} -o workaround=rename,allow_other

  4. 在unix服务器上设置mdbtools

因此,我使用了文档中的默认PHP代码并编写了这个PHP脚本:

$rows = $cols = array();
if (($handle = popen('/usr/bin/mdb-export {unix mount point}/{file}.mdb {table} 2>&1', 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        $num = count($data);
        if ($row == 1) { for ($c=0; $c < $num; $c++) { $cols[] = $data[$c]; } }
        else { for ($c=0; $c < $num; $c++) { $rows[$row][$cols[$c]] = $data[$c]; } }
        $row++;
    }
    pclose($handle);
}
print_r($rows);
  • /usr/bin/mdb-export 的路径应该是 mdb-export 文件的路径(如果可以的话,请使用 find / -name "mdb-export")找不到你的)。
  • 挂载点{unix挂载点}应该是一个空文件夹(我使用/usr/home/remotemdb
  • {table}应该是mdb 文件中的表名。使用命令 mdb-tables {unix mount point}/.mdb 查询 mdb 文件内所有可能的表

不需要驱动程序、配置或其他东西,只需简单的 mdbtools 和对文件的访问,本例中是通过ssh远程连接来实现的。如果你愿意,你可以安装fuse包,来自动挂载远程目录,但这是另一个问题。

希望有人能帮上忙。

Finally, I found solution.

  1. Set up on Win server FreeSSHd, configure connection account and set directory to one, you need
  2. Set up on unix server sshfs
  3. Mount Win server directory with .mdb files

    sshfs {user}@:/ {unix mount point} -o workaround=rename,allow_other

  4. Set up on unix server mdbtools

So, I used default PHP code from docs and write this PHP script:

$rows = $cols = array();
if (($handle = popen('/usr/bin/mdb-export {unix mount point}/{file}.mdb {table} 2>&1', 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        $num = count($data);
        if ($row == 1) { for ($c=0; $c < $num; $c++) { $cols[] = $data[$c]; } }
        else { for ($c=0; $c < $num; $c++) { $rows[$row][$cols[$c]] = $data[$c]; } }
        $row++;
    }
    pclose($handle);
}
print_r($rows);
  • Path to /usr/bin/mdb-export should be path to your mdb-export file (use find / -name "mdb-export", if you can't find yours).
  • Mount point {unix mount point} should be an empty file folder (I used /usr/home/remotemdb)
  • Table {table} should be the table name inside mdb file. Query all possible tables inside mdb file with command mdb-tables {unix mount point}/<file>.mdb

There is no need for drivers, configuration or other stuff, just plain mdbtools and access to file, in this case, achieved with remote connection through ssh. In you want, you can install fuse package, to autmatically mount remote directory, but that is another question.

Hope someone this helps.

白昼 2024-11-15 20:29:39

您没有连接到“服务器 dsn”。 DSN 仅是本地事物。它们根本不暴露于远程连接。如果您希望计算机连接到数据库,则需要在该计算机上配置 DSN - 您将无法使用其他地方指定的 DSN。

对于 PHP ODBC,那就是

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password);

You don't connect to a "server dsn". DSN's are a local thing only. They're not exposed for remote connections at all. If you want a machine to connect to a database, you need to have a DSN configured on that machine - you won't be able to use a DSN specified elsewhere.

For PHP ODBC, that'd be

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password);
羁拥 2024-11-15 20:29:39

您是正确的,因为您需要 ODBC 到 ODBC 桥。

OpenLINK 中,我们引用了 多层 ODBC 到 ODBC 桥...

这是多层,因为它具有如下所示的客户端/服务器架构 --

Linux 客户端 --
ODBC应用程序
OpenLink 通用 ODBC 驱动程序

Windows Server --
32 位 OpenLink 请求代理
32 位 OpenLink ODBC 代理
32 位 Microsoft Access ODBC 驱动程序(带有预配置的 DSN)
Microsoft Access 数据库文件。

You are correct insomuch that you require an ODBC to ODBC Bridge.

At OpenLInk we refer to a Multi-tier ODBC to ODBC Bridge...

This is Multi-tier in the sense that it has a client/server architecture as follows --

Linux Client --
ODBC Application
OpenLink Generic ODBC Driver

Windows Server --
32bit OpenLink request Broker
32bit OpenLink ODBC Agent
32bit Microsoft Access ODBC Driver (with pre configured DSN)
Microsoft Access Database file.

两相知 2024-11-15 20:29:39

它是商业的,所以可能不感兴趣,但 Easysoft 有一个用于 Access 的 ODBC 驱动程序,可在大多数 *nix 上使用。不需要桥。目前 FreeBSD 上还没有构建版本,但如果您有兴趣的话,我可以在周一为您构建一个版本。

有一些开源 MDB 工具可能足以满足您的需求,但它缺乏很多功能。

Easysoft Access ODBC 驱动程序

MDB 工具

Its commercial, so possibly not of interest, but Easysoft have an ODBC driver for Access that's available on Most *nix's. No bridge required. There isn't a build on FreeBSD at the moment, but I could get one built for you on Monday if it's of any interest.

There is the open source MDB tools that may have enough for what you want, but it is lacking in quite a lot of functionality.

Easysoft Access ODBC Driver

MDB tools

你另情深 2024-11-15 20:29:39

将 PDO 与 MDBTools 结合使用:

安装:

apt-get install libodbc1

apt-get install libmdbodbc1

apt-get install php5-odbc

(重新启动 apache)

示例:

$query = 'SELECT * FROM Table';
$mdb_file = 'file.mdb';
$driver = 'MDBTools';
$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;Uid=user;Pwd=pass;";
$connection = new \PDO($dataSourceName);
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);

Use PDO with MDBTools:

install:

apt-get install libodbc1

apt-get install libmdbodbc1

apt-get install php5-odbc

(restart apache)

Sample:

$query = 'SELECT * FROM Table';
$mdb_file = 'file.mdb';
$driver = 'MDBTools';
$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;Uid=user;Pwd=pass;";
$connection = new \PDO($dataSourceName);
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文