【问题标题】:PHP MS Access connection not workingPHP MS Access连接不起作用
【发布时间】:2014-11-29 09:02:38
【问题描述】:

我正在尝试将 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 Database Engine 2010 Redistributable。

我也尝试了in this video 显示的所有内容。

我也完全按照接受的答案in this link 中的内容完成了操作,并且我在 Windows 7 64 位上运行 64 位 WampServer 版本 2.4,并且还有 64 位 Microsoft Office。

对不起,我的英语不好,我对 php 和连接到 ms 访问都是新手。我已经连接到mysql但从未访问过。

【问题讨论】:

  • 有你的脚本echo (8 * PHP_INT_SIZE) . "-bit&lt;br/&gt;";。结果(“32 位”或“64 位”)必须与您安装的 Access 数据库引擎的版本匹配。
  • 它给了我 32 位的输出。应该是64位的吧??
  • 嗯。答案here 表明上述测试可能具有误导性。您能否创建一个 .mdb 文件进行测试并尝试使用Driver={Microsoft Access Driver (*.mdb)} 连接到它(不带“,*.accdb”)?
  • 得到不同的错误“odbc_fetch_row() 期望参数 1 是资源,数组在第 15 行的 C:\wamp\www\test\new 1.php 中给出”
  • 啊哈。我很确定您收到 "odbc_fetch_row() 期望参数 1 是资源 ..." 错误,因为 $rs[]=odbc_exec($conn,$sql);。改为使用 $rs=odbc_exec($conn,$sql); 尝试您的 .mdb 测试。

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


【解决方案1】:

测试证实,尽管报告安装了 64 位 WampServer,但 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,
  • 找到一个将 PHP 作为 64 位进程运行的 WAMP 设置,或者
  • 切换到 32 位版本的 Office。

【讨论】:

  • 是否有可能获得64位版本的php?
  • @user3933143 这当然是可能的,但 Windows 的主要 PHP 下载页面 here 说“注意: x64 构建当前是实验性”。 (也许这就是为什么您首先获得了 32 位版本的原因。)还有一个问题是如何将另一个版本的 PHP “删除”到现有的 WAMP 安装中。不幸的是,我没有这方面的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
相关资源
最近更新 更多