从linux上的php连接到MS Access远程.mdb文件

时间:2011-05-20 13:49:55

标签: php ms-access odbc jet unixodbc

我一直在挖掘互联网几天,阅读非常古老的信息,这导致了很老的和不存在的网站,我知道,仍然需要达到我的目标。

  1. 我们在运行WindowsXP的服务器上有一个file.mdb,所以我需要将它添加到ODBC数据源。我这样做的步骤很简单,最后是“System 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驱动程序)。
  6. 纠正我,如果我弄错了,请给我更多建议,如何实现这种联系。

5 个答案:

答案 0 :(得分:4)

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

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

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

  5. 在unix服务器上设置 mdbtools

  6. 所以,我使用了docs中的默认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}/<file>.mdb
    • 查询mdb文件中的所有可能表

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

    希望有人帮忙。

答案 1 :(得分: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);

答案 2 :(得分:1)

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

OpenLInk,我们引用Multi-tier ODBC to ODBC Bridge ...

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

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

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

答案 3 :(得分:0)

它的广告,可能不感兴趣,但Easysoft有一个用于Access的ODBC驱动程序,可在Most * nix上使用。不需要桥梁。目前还没有FreeBSD的构建版本,但如果感兴趣,我可以在周一为你构建一个。

开源MDB工具可能足以满足您的需求,但缺乏相当多的功能。

Easysoft Access ODBC Driver

MDB tools

答案 4 :(得分:0)

将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);