我正在尝试将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
此外,我已经从这个链接下载并安装了Microsoft Access Database Engine 2010 Redistributable。
此外,我确实尝试了这段视频中显示的所有内容。
我也做了这个链接中公认答案中所写的事情,我在windows 7 64位上运行64位WampServer 2.4版,也有64位microsoft office。
很抱歉我的英语不好,我是php和ms访问的新手。我已经连接到mysql,但从未访问过。
测试证实,尽管WampServer安装了64位,但PHP是作为32位进程运行的。旧的"Jet"ODBC驱动程序(Driver={Microsoft Access Driver (*.mdb)}
)可以成功读取.mdb文件,并且没有64位版本的Jet,因此PHP必须以32位运行。
现在,安装了64位Office后,问题是32位PHP需要使用32位版本的较新访问数据库引擎(也称为"ACE")驱动程序来操作.accdb文件,但Microsoft不支持在同一台计算机上同时使用32位和64位版本的ACE。(网络搜索会发现有一种方法可以迫使这种情况发生,但不建议这样做,因为它显然会破坏Office。)
因此,最终的解决方案是:
- 使用.mdb文件而不是.accdb文件,并在32位PHP下继续使用Jet
- 找到一个将PHP作为64位进程运行的WAMP设置,或者
- 切换到32位版本的Office