PHP + odbc:未找到数据源名称且未指定默认驱动程序

时间:2018-01-31 18:06:15

标签: php ms-access odbc

我使用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}抛出   第424行的C:\ inetpub \ wwwroot \ dir \ index.php

系统:

  • PHP版本:5.6.3
  • 服务器:带有IIS 7.5的Windows Server 2008 R2

我已经为SQL Server安装了 64位ODBC驱动程序11 ,并在php.ini文件中启用了扩展程序。我看到一些教程表明我必须打开ODBC数据源管理器,转到系统DSN选项卡,然后创建一个系统数据源。如果我必须这样做,在服务器连接我应该选择什么,因为我实际上使用此驱动程序访问Access数据库文件。同样在测试环境中,我没有必要做这样的事情。

有什么想法吗?

提前谢谢

EDIT 好。我做了以下事情: 1)我安装了MS Visual C ++ 2015,因为我缺少Microsoft Access数据库引擎2016的dll文件(这增加了ODBC中缺少的驱动程序)。 2)安装的MS Access数据库引擎2016。 3)在这两次安装之后,我创建了一个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 

任何想法??

1 个答案:

答案 0 :(得分:0)

您需要在连接字符串中指定正确的ODBC驱动程序。 如果你的PHP工作在32位模式 - 你必须使用32b驱动程序。

其次,SQL Server的驱动程序和MS Access的驱动程序是两个非常不同的东西。如果您需要使用.MDB - 您需要安装MS Access。

在数据源管理器中创建系统DSN非常有用,它极大地简化了程序中的连接字符串(“DSN = mydsn”并且没有其他内容)。它还允许您以方便的方式配置DSN(选择不同版本的驱动程序,更改文件的位置等)。它还允许您通过简单地连接到不同应用程序的同一数据库:“DSN = mydsn”。 创建DSN的唯一情况可能是不利的,如果由于某种原因,您无法创建DSN。例如,如果您没有足够的权限在计算机上。但在所有其他情况下 - 创建DSN,它将节省大量的时间和精力。