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


Connect to MS Access remote .mdb file from php on linux

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

  1. 我们在运行WindowsXP的服务器上有一个文件.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驱动程序)

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

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

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

    sshfs{user}@:/{unix挂载点}-o解决方法=重命名,允许其他

  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导出的路径应该是您的mdb导出文件的路径(如果找不到您的文件,请使用find / -name "mdb-export"
  • 装载点{unix装载点}应该是一个空文件夹(我使用了/usr/home/remotemdb
  • {Table}应该是mdb文件中的表名。使用命令mdb-tables {unix mount point}/<file>.mdb查询mdb文件中所有可能的表

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

希望有人能帮上忙。

您没有连接到"服务器dsn"。DSN只是本地的。它们根本不用于远程连接。如果你想让一台机器连接到数据库,你需要在那台机器上配置一个DSN——你将无法使用在其他地方指定的DSN。

对于PHP ODBC,这将是

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

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

在OpenLInk,我们提到了一个多层ODBC到ODBC桥。。。

这是多层,因为它有一个客户端/服务器体系结构,如下所示——

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

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

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

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

Easysoft Access ODBC驱动程序

MDB工具

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