2016-09-12 51 views
0

我正在努力获取ODBC连接,但希望在确保设置正确的情况下提供一些帮助。我也希望我可以在编写PHP代码来验证与数据库的连接正在工作时获得一些帮助。用于MS Access安装的ODBC

在Windows Server 2008 R2计算机上,我浏览到C:\ Windows \ SysWOW64并运行odbcad32。 (这是我开始感到困惑的地方......我查看的大多数页面都提供了非常基本的信息。)DB是一个MS Access文件。我选择哪个选项卡...用户DSN ...系统DSN ...文件DSN?

一旦我选择正确的选项卡,我是否正确输入数据源名称的任何内容? (例如,即使文件是'it.accdb',我可以将数据源命名为'Employees'吗?'Employees.accdb'?还是必须与实际文件名匹配?

最后,将PHP代码连接到数据库?该数据库当前是D:\ Temp \ IT.accdb。我有系统DSN选项卡中的数据源名称为'Employees',并指向。DB我试过下面的代码:

<?php 
$dbName = "Employees"; 

if (!file_exists($dbName)) { 
    die("Could not find database file."); 
} 
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=$dbName; Uid=; Pwd=;"); 

我试图改变$ DBNAME是各种各样的事,但一切我在没有找到数据库文件试图结果

能SOM一个人帮助我呢?

+0

PHP脚本是否与数据库在同一台计算机上运行? – ChristianF

+0

实时数据库位于远程虚拟服务器(Windows Server 2008 R2)上。我创建了一个测试数据库,为了获得成功的连接,我一直在迁移到不同的位置。如果可能,我宁愿将数据库留在当前位置。但是如果我无法远程连接它,我会将实时数据库移动到本地位置。 – egoche

+0

请编辑您的问题以阐明:您的PHP代码是否会在Access数据库文件所在的同一台Windows Server 2008 R2计算机上运行?如果没有,它会在其他Windows盒子上运行吗?如果是这样,PHP代码是以32位进程还是64位进程的方式运行?看来数据库文件是.accdb;那是对的吗? –

回答

0

有两种方法可以通过网络访问ODBC数据源。您可以安装包含数据库的网络驱动器,并为系统用户提供对其的读/写访问权限(不是我推荐的);或者使用ODBC brigde,如OpenLink

如果你想将DB移动到与PHP代码相同的服务器上,那么我认为this sitepoint guide应该是有帮助的。

后者是推荐的最简单的方法。为此,您需要在包含数据库的服务器上将ODBC源设置为“System-DSN”,并将其命名为任何您喜欢的名称。 “系统数据库”应选中“无”,我建议设置用户名和密码。然后安装指向此DSN的ODBC请求代理。
在客户端设置ODBC客户端桥,将其配置为在远程端使用DSN。然后你需要做的就是在PHP中创建一个像这样的DSN字符串:

$dsn = "odbc:dsn_name"; 

就是这样。

请注意,经纪人确实需要小心谨慎地设置,但只要您阅读指南,它就非常简单。 OpenLink也有一个试用版,所以你可以确定它是否适合你。要弄清楚你需要哪些部件,他们也有一个Software selection wizard

也有这种软件的其他提供者,但我只有OpenLink的经验。

+0

如果这些是这个过程中唯一可用的两个选项,我更倾向于将数据库移动到安装PHP的Web服务器。 (试图避免为一个小项目请求资金。)所以......如果我的数据库与Web/PHP服务器在同一个系统上,我是否认为我仍然需要ODBC驱动程序设置?如果是这样,那么它是否会被设置为“System-DSN”? – egoche

+0

我在回答中添加了第二段,并提供了一个链接,指明您应该如何在同一台服务器上进行设置。还有一些开源和/或免费的ODBC驱动程序,但由于我们的要求,我没有看到它们。因为他们不支持我们的用例。 – ChristianF

+0

谢谢,基督徒。这是我在这个过程中看过的许多页面中的一个......我会再看一看,仔细看看它。还有一个问题是,当创建ODBC连接时,您需要提供一个数据源名称,根据我的确定,它不需要与实际文件名称相同。 (例如,文件名可以是“One.accdb”,但数据源名称可以是“Two”。我的问题是,您将如何使用PHP代码?'$ dsn =“odbc:one.accdb”'或'$ dsn =“odbc:two”' – egoche