6

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

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

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

4

5 回答 5

4

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

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

    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 mount point}应该是一个空文件夹(我使用/usr/home/remotemdb
  • {table}应该是 mdb 文件中的表名。使用命令查询 mdb 文件中所有可能的表mdb-tables {unix mount point}/<file>.mdb

不需要驱动程序、配置或其他东西,只需简单的 mdbtools 和对文件的访问,在这种情况下,通过 ssh 远程连接实现。在您想要的情况下,您可以安装 fuse 包,以自动挂载远程目录,但这是另一个问题。

希望有人会有所帮助。

于 2011-06-10T10:40:39.490 回答
1

您没有连接到“服务器 dsn”。DSN 只是本地的东西。它们根本不会暴露给远程连接。如果您希望一台机器连接到数据库,您需要在该机器上配置一个 DSN - 您将无法使用其他地方指定的 DSN。

对于 PHP ODBC,那就是

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password);
于 2011-05-20T14:37:08.397 回答
1

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

OpenLInk,我们指的是多层 ODBC 到 ODBC 桥...

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

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

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

于 2011-05-23T15:17:04.107 回答
0

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

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

Easysoft Access ODBC 驱动程序

MDB 工具

于 2011-06-11T16:41:15.293 回答
0

将 PDO 与 MDBTools 一起使用:

安装:

apt-get 安装 libodbc1

apt-get 安装 libmdbodbc1

apt-get 安装 php5-odbc

(重启阿帕奇)

样本:

$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);
于 2015-09-29T00:03:02.050 回答