无法使用PHP读取MS访问表(链接到ODBC数据源)


Unable to read an MS Access Table (linked to an ODBC Data Source) using PHP

我正在研究一个应用程序,其中来自ODBC启用的数据源的数据使用链接表导入到MS Access 2007数据库。棘手的部分是,每次进行链接刷新(或打开链接表)时,ODBC数据源都会弹出一个窗口,其中必须输入4个不同的参数(用户名、密码、服务器名、工作组名)。

虽然这是可能的手动,我发现没有办法以编程方式读取这个链接表。

我使用PHP脚本读取链接表。当我试图读取这个链接表时,PHP脚本的执行无限期地停止了。我的DSN配置正确,可以在所有其他情况下成功读取数据,包括那些数据源不需要任何输入参数/凭证的链接表。然而,在这种情况下,它失败了。

简而言之,我的系统是PHP<->MS Access (Linked Table)<-->ODBC Data Source。PHP脚本旨在使用链接表从ODBC数据源读取更新的数据。由于某些原因,PHP不能直接与ODBC数据源接口,所以我使用MS Access作为中介。

PHP的odbc_connect函数只允许DSN Name、username、password、cursor_type作为参数。我不知道如何输入我的MS Access表链接的ODBC数据源所要求的4个参数(用户名,密码,服务器名,工作组名)。

我在Windows 7上使用PHP 5.4与MS Access 2007。

我请求开发者社区在这方面帮助我提供必要的指示。也欢迎对变通方法提出任何建议。

如果您使用双ODBC: PHP> ODBC> MS ACCESS> ODBC> SOURCE..您有以下选项:

  • 切断"Access"中间商,直接连接
  • 如果你想使用MS Access,使用"FILE DNS"从MS Access连接到链接表,其中FILE DNS已初始化所有4个参数。(这将消除MS Access要求您在刷新链接表时输入服务器信息)
  • 还没有尝试过这从PHP方面,但你可以通过msysojects表或数据库循环。并使用自定义连接字符串更新链接。
无论如何,解决你问题的办法是……
让Access在刷新链接表时不提示输入参数,可以使用file dns或save password。

直接连接到派生链接表的数据源。如果是MS Access, SQL Server, MySQL等,请为该数据库安装适当的ODBC驱动程序。

这是一个使用PDO的PHP/MS Access无dns解决方案。

还可以查看不同的连接字符串,其中包括工作组、用户和密码参数。

<?php
$database="C:'Path'To'database.accdb";
# open the connection
try {
    $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};
                    DBq=$database;Uid=Admin;Pwd=;");
    $sql = "SELECT * FROM table1";    
    $STH = $dbh->query($sql);
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."'n";
    exit;
}
echo "'n";
while($row = $STH->fetch()) {
    # output query results            
    echo $row;
}
# close the connection
$dbh = null;
?>