通过 PHP 和 MS Access 2010 显示主键

Showing primary key via PHP and MS Access 2010

我已经在这里待了几个小时了。我正在尝试在访问数据库上显示给定 table 的主键。首先是尝试 odbc_primarykeys 函数,然后尝试 odbc_statistics.

都报错:

odbc_primarykeys(): SQL error: Failed to fetch error message, SQL state HY000 in SQLPrimaryKeys

odbc_statistics(): SQL error: Failed to fetch error message, SQL state HY000 in SQLStatistics.

这是我的代码:

$dbu = realpath('E:\AccessBackEnds\Universal\UniversalBackEnd.accdb');
$connu = odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$dbu",'','') or die ("Unable to connect to server");

$result1 = odbc_primarykeys($connu, "UniversalBackEnd", "Administrators", "UserInformation");

$result2 = odbc_statistics($connu, "UniversalBackEnd", "Administrators", "UserInformation", 1, 0);

我试过将数据库名称 (UniversalBackEnd) 和所有者 (Administrators) 留空,但出现了同样的错误。 Google 搜索中的 HY000 错误没有太大帮助,php.net 页面的支持令人惊讶。 odbc_field_lenodbc_field_type 等函数在页面上运行良好。有什么见解吗?

我很确定无法通过 Access ODBC 驱动程序检索该信息。您可能需要使用 com_dotnet 和 ACE DAO 来获取它:

$pkFields = array();
$dbe = new COM("DAO.DBEngine.120");
$db = $dbe->OpenDatabase("C:\Users\Public\foo.accdb");
$tbd = $db->TableDefs("Table2");
foreach ($tbd->Indexes as $idx) {
    if ($idx->Primary) {
        foreach ($idx->Fields as $fld) {
            $pkFields[] = $fld->Name;
        }
        break;
    }
}
$db->Close();
print_r($pkFields);

以两个字段(列)为主键的 table 的示例结果:

Array
(
    [0] => City
    [1] => State
)