【发布时间】:2018-07-10 22:47:04
【问题描述】:
我使用 odbc 驱动程序从 MS Access 数据库文件中加载数据。
PHP 代码:
$connStr ='odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};' . 'Dbq=C:\\inetpub\\wwwroot\\dir\\dir.accdb;';
$dbh = new PDO($connStr);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="my_sql_query";
$sth = $dbh->prepare($sql);
$params=array();
$sth->execute($params);
在本地计算机上这可行,但是当我上传到主服务器时,我在尝试访问站点时收到此消息:
错误:
PHP 致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[IM002] SQLDriverConnect: 0 [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 C:\inetpub\wwwroot\dir\index.php:424 堆栈跟踪:#0 C:\inetpub\wwwroot\dir\index.php(424): PDO->__construct('odbc:Driver={Mi...') #1 {main} 抛出 C:\inetpub\wwwroot\dir\index.php 第 424 行
系统:
- PHP 版本:5.6.3
- 服务器:带有 IIS 7.5 的 Windows Server 2008 R2
我已安装 64bit ODBC Driver 11 for SQL Server 并且在 php.ini 文件中启用了扩展。我看到一些教程表明我必须打开 ODBC 数据源管理器,转到系统 DSN 选项卡,然后创建一个系统数据源。如果我必须这样做,在服务器上连接我应该选择什么,因为我实际上是在使用这个驱动程序来访问 Access 数据库文件。同样在测试环境中,我不必做这样的事情。
有什么想法吗?
提前谢谢你
编辑 好的。我做了以下事情: 1)我安装了 MS Visual C++ 2015,因为我缺少 Microsoft Access 数据库引擎 2016 的 dll 文件(这会添加 ODBC 中缺少的驱动程序)。 2) 安装 MS Access 数据库引擎 2016。 3)在这 2 次安装之后,我创建了一个 DSN 并将其指向我的访问文件
当我尝试运行 php 文件时,我得到了这个:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY009]:
Invalid use of null pointer: 0 [Microsoft][ODBC Microsoft Access Driver]Invalid use of null pointer (SQLPrepare[0] at ext\pdo_odbc\odbc_driver.c:206)' in C:\inetpub\wwwroot\dir\index.php:434
Stack trace:
#0 C:\inetpub\wwwroot\dir\index.php(434): PDO->prepare('')
#1 {main}
thrown in C:\inetpub\wwwroot\dir\index.php on line 434
有什么想法吗??
【问题讨论】:
-
您的问题不是涉及 SQL Server,而是涉及 MS Access——虽然是同一家公司,但有两个不同的 DBMS。