【发布时间】:2012-04-22 19:51:25
【问题描述】:
我正在尝试使用 MDBTools 驱动程序从 Access 数据库中读取以在 Ubuntu 11.10 上执行 odbc_connect。使用/etc/odbc.ini中的DSN设置时,它工作正常。
以下是/etc/odbc.ini的内容:
[logindb]
Description = Microsoft Access Try DB
Driver = MDBToolsODBC
Database = /home/folder1/TestDb.mdb
Servername = localhost
odbc.ini 中的 Driver 属性引用了MDBToolsODBC,所以,这是我在/etc/odbcinst.ini 中的 odbc 设置:
[MDBToolsODBC]
Description = MDB Tools ODBC
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage =
CPTimeout =
CPReuse =
我的问题是,当使用$conn = odbc_connect('logindb','',''); 时,我必须使用数据库位置的硬编码值。理想情况下,我想使用无 DSN 连接指定odbc_connect 的第一个参数,以便我的数据库文件可以是一个变量(将从不同的数据库读取)。比如:
if ($cond1) {
$db = "/home/folder1/TestDb.mdb";
} else {
$db = "/home/folder1/TestDb2.mdb";
}
$conn = odbc_connect("odbc:Driver={MDBToolsODBC};Dbq=$db",'','');
我也试过不带 odbc: 前缀,但没用。谁能告诉我为什么指定 DSN 有效,但是当尝试使用看起来相同的属性动态指定它时,它不起作用?我认为这与无 DSN 连接中第一个参数的参数和内容有关。与往常一样,非常感谢任何帮助。
【问题讨论】:
-
@Rocket:跟在
/etc/odbc.ini里的变量名后面,不应该是Database=$db吗? -
@eggyal:这也没有帮助。它仍然说:
SQL error: [unixODBC][Driver Manager]Data source name not found, and no default driver specified. -
@Rocket:如果你明确指定
Driver=/usr/lib/libmdbodbc.so.0? -
@eggyal:是的。
$conn = odbc_connect('logindb','','');工作正常。 -
@Rocket:对不起,我的意思是如果你在 DSN 中指定它:
odbc_connect("Driver=/usr/lib/libmdbodbc.so.0;Database=$db",'','')?
标签: php ms-access ubuntu odbc mdbtools