2014-10-04 141 views
2

我想连接php服务器到MS访问数据库,我已经尝试了一切仍然无法连接。PHP的MS Access连接不工作

这里是我的代码

<?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,但从来没有访问。

+0

让你的脚本'echo(8 * PHP_INT_SIZE)。 “-bit
”;'。结果(“32位”或“64位”)必须与您安装的Access数据库引擎的版本相匹配。 – 2014-10-04 14:28:41

+0

它给我32位作为输出。它应该是64位? – 2014-10-04 15:33:09

+0

嗯。答案[这里](http://stackoverflow.com/a/3233881/2144390)表明上述测试*可能会误导。你可以创建一个。mdb文件进行测试并尝试使用'Driver = {Microsoft Access Driver(* .mdb)}'(不带“,* .accdb”)连接到它? – 2014-10-04 15:49:57

回答

3

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

现在,安装了64位Office的问题是,32位PHP将需要使用新版Access数据库引擎(又名“ACE”)驱动程序的32位版本来操作.accdb文件,但Microsoft不支持同一台机器上的32位和64位版本的ACE。 (网络搜索,就会发现有一种方法来强制这样的事情发生,但不推荐,因为它可以明显地打破办公室。)

所以,最终的决议将是下列之一:

  • 使用.mdb文件,而不是一个.ACCDB文件,并继续在32位PHP使用Jet,
  • 发现运行PHP作为一个64位处理的WAMP设置,或
  • 切换到32位Office版本。
+0

是否有可能获得64位版本的PHP? – 2014-10-04 16:55:28

+0

@ user3933143这当然是可能的,但主要的PHP下载页面[这里](http://windows.php.net/download/)说:“**注意:** x64构建目前**实验**” 。 (也许这就是为什么你首先得到一个32位版本的原因。)还有一个问题,就是如何将另一个版本的PHP“删除”到现有的WAMP安装中。不幸的是,我没有这方面的经验。 – 2014-10-04 17:18:41

+0

感谢您的帮助。 – 2014-10-04 17:30:42