通过PHP和MS Access 2010显示主键

时间:2015-04-22 02:50:57

标签: php ms-access-2010

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

两者都给出错误:

  

odbc_primarykeys():SQL错误:无法获取错误消息SQL   SQLPrimaryKeys中的状态HY000

  

odbc_statistics():SQL错误:无法获取错误消息,SQL状态   SQLStatistics中的HY000。

这是我的代码:

$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_len&等功能odbc_field_type在页面上正常工作。有什么见解吗?

1 个答案:

答案 0 :(得分:0)

我非常确定无法通过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);

包含两个字段(列)作为主键的表的示例结果:

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