我使用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
系统:
我已经为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
任何想法??
答案 0 :(得分:0)
您需要在连接字符串中指定正确的ODBC驱动程序。 如果你的PHP工作在32位模式 - 你必须使用32b驱动程序。
其次,SQL Server的驱动程序和MS Access的驱动程序是两个非常不同的东西。如果您需要使用.MDB - 您需要安装MS Access。
在数据源管理器中创建系统DSN非常有用,它极大地简化了程序中的连接字符串(“DSN = mydsn”并且没有其他内容)。它还允许您以方便的方式配置DSN(选择不同版本的驱动程序,更改文件的位置等)。它还允许您通过简单地连接到不同应用程序的同一数据库:“DSN = mydsn”。 创建DSN的唯一情况可能是不利的,如果由于某种原因,您无法创建DSN。例如,如果您没有足够的权限在计算机上。但在所有其他情况下 - 创建DSN,它将节省大量的时间和精力。