使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误

Posted

技术标签:

【中文标题】使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误【英文标题】:Fatal Error when creating PHP PDO connection with msaccess using ODBC 【发布时间】:2017-09-25 02:03:50 【问题描述】:

由于某些原因,我需要在我的 php 应用程序中使用 ms-access,因此我在 WAMP 中启用了php_pdo_odbc 扩展。显示在phpinfo()

但是我无法连接数据库,它返回以下错误。

( ! ) 致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 C:\wamp64\www...\portals...\config.php 在第 15 行

(!)> PDOException: SQLSTATE[IM002] SQLDriverConnect: 0 [微软][ODBC Driver Manager] 未找到数据源名称且没有默认驱动程序 在第 15 行的 C:\wamp64\www...\portals...\config.php 中指定

$db_username = ''; //username
$db_password = ''; //password

//path to database file
$database_path = "StudentLogInData.mdb";

//check file exist before we proceed
if (!file_exists($database_path)) 
    die("Access database file not found !");


//create a new PDO object
$database = new PDO("odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb); DBQ=realpath($database_path); Uid=$db_username; Pwd=$db_password;");

我在 Windows 7(64 位)上使用 WAMP 64 位版本。搜索了很多 *** 的解决方案,例如尝试运行 32 位版本,但无法在 64 位上安装。请帮助如何使它工作?

【问题讨论】:

【参考方案1】:

realpath() 是一个 PHP 函数,不是 ODBC 驱动程序可以理解的。您可能希望将其从 DSN 中删除:

$database_path = realpath("StudentLogInData.mdb");
$database = new PDO("odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb); DBQ=$database_path; Uid=$db_username; Pwd=$db_password;");

关于驱动程序名称,您需要在 开始 菜单中键入 ODBC 并验证给定名称在您的 Drivers 选项卡中可用:

【讨论】:

完成。但同样的错误,也尝试了 DSN 字符串中的完整路径,但同样的错误也是如此。我觉得这必须是 64 位版本。 好吧,抱歉,我假设您已经安装了提供“Microsoft Access Driver (*.mdb, *.accdb)”的驱动程序:microsoft.com/en-US/download/details.aspx?id=13255 我已经安装了它并重新启动了机器,但仍然是同样的错误。我检查了我没有列出 MS Access 的驱动程序选项卡。截图imgur.com/a/l4hCL 那么显然没有安装成功。 PHP 将无法使用驱动程序,直到它可用。 但是我从你的链接安装了驱动程序。现在能做什么?

以上是关于使用 ODBC 使用 msaccess 创建 PHP PDO 连接时出现致命错误的主要内容,如果未能解决你的问题,请参考以下文章

ODBC x64 oracle 问题

将 Snowflake ODBC 驱动程序与 MS Access 一起使用

使 ODBC 链接访问表对用户可用

2017.8.16

ODBC 驱动程序在 Qt 中的使用

MS Access:在设计指南视图中创建链接表不显示要链接的表?