PHP MS Access连接无法正常工作

时间:2014-10-04 14:06:49

标签: php database odbc ms-access-2010 wampserver

我正在尝试将php服务器连接到ms访问数据库,我已经尝试了一切仍然无法连接。

这是我的代码

<?php
$conn=odbc_connect('testdb','','');
//$conn=odbc_connect("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\wamp\www\test\testdb.accdb", '', '');
if (!$conn) {
  exit("Connection Failed: " . $conn);
}

$sql="SELECT * FROM testdb";
$rs[]=odbc_exec($conn,$sql);
if (!$rs) {
  exit("Error in SQL");
}

while (odbc_fetch_row($rs))    //<-------line 14
{
    $json_output[] = odbc_result($rs, "test");
    print(json_encode($json_output));

}
odbc_close($conn);
?>  

如果我使用

 $conn=odbc_connect('testdb','','');

然后我得到以下错误

Warning: odbc_fetch_row() expects parameter 1 to be resource, array given in C:\wamp\www\test\new 1.php on line 14

如果我使用

$conn=odbc_connect("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\wamp\www\test\testdb.accdb", '', '');

然后我得到错误。

Warning: odbc_connect(): SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\wamp\www\test\new 1.php on line 3

我已经编辑了我的php.ini文件以包含odbc扩展名

;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
extension=php_pdo_odbc.dll  <--- here
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll

此外,我已经从this link下载并安装了Microsoft Access数据库引擎2010可再发行组件。

此外,我确实尝试了显示in this video的所有内容。

我也完全按照接受的答案in this link编写,我在Windows 7 64位上运行64位WampServer版本2.4,并且还有64位微软办公室。

抱歉我的英文不好,我是php和连接到ms访问的新手。我已经完成了与mysql的连接,但从未访问过。

1 个答案:

答案 0 :(得分:2)

测试证实,尽管报告了WampServer的64位安装,但PHP仍然以32位进程运行。较旧的“Jet”ODBC驱动程序(Driver={Microsoft Access Driver (*.mdb)})可以成功读取.mdb文件,并且没有64位版本的Jet,因此PHP必须以32位运行。

现在,安装了64位Office时,问题是32位PHP需要使用32位版本的较新的Access数据库引擎(又名“ACE”)驱动程序来操作.accdb文件,但Microsoft在同一台计算机上不支持32位和64位版本的ACE。 (网络搜索会发现有一种方法可以强制这种情况发生,但不建议这样做,因为它显然会破坏Office。)

因此,最终解决方案将是以下之一:

  • 使用.mdb文件而不是.accdb文件,并继续在32位PHP下使用Jet,
  • 找到一个WAMP设置,它将PHP作为64位进程运行,或者
  • 切换到32位版本的Office。