无法使用PHP

时间:2015-07-10 13:14:59

标签: php database windows ms-access odbc

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

虽然这可以手动完成,但我发现无法以编程方式阅读此链接表。

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

简而言之,我的系统 PHP < - > M S Access(链接表)< - ODBC数据源。 PHP脚本旨在使用链接表从ODBC数据源读取更新的数据。由于某些原因,PHP无法直接与ODBC数据源接口,因此我使用MS Access作为中介。

PHP的odbc_connect功能仅允许DSN名称,用户名,密码,cursor_type作为参数。我不知道如何输入我的MS Access表链接到的ODBC数据源所需的4个参数(用户名,密码,服务器名,工作组名)。

我在Windows 7上使用PHP 5.4和MS Access 2007.

我请求开发人员社区帮助我提供必要的指导。任何有关变通方法的建议也欢迎。

先谢谢。

2 个答案:

答案 0 :(得分:0)

如果您使用双ODBC:PHP> ODBC> MS ACCESS> ODBC>消息来源..您有以下选择。

  • 切断"访问"中间人并直接连接。
  • 如果您想使用MS Access,请使用" FILE DNS"从MS ACCESS连接到链接表,其中文件DNS已初始化所有4个参数。 (这将消除MS Access,要求您在刷新链接表时输入服务器信息)
  • Haven没有尝试从PHP端进行此操作,但您可以遍历msysobjects表或database.tabledefinitions并使用自定义连接字符串更新链接。

任何方式,你的麻烦的解决方案将是。通过使用文件dns或保存密码刷新链接表时,使Access不会提示参数。

答案 1 :(得分:0)

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

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

另请参阅different connection strings,其中包括工作组,用户和密码参数。

<?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;

?>