-2

是否可以从数据源名称中获取数据库名称和位置?

$dsn = $_GET['dsn'];
$conn=odbc_connect($dsn,'','');

更新代码

$dsn = "JuniorDSN";
$conn=odbc_connect($dsn,'','') or die ("Can't connect to DSN");

$dsnarray = explode(";",$dsn);
$dsn0 = $dsnarray[0];

echo $dsn0;
4

1 回答 1

1

典型的 DSN 如下所示:

Driver={Driver name with space hence curly braces};dbname=testdb

所以它是parameter=value用分号分隔的对。;您可以通过然后爆炸字符串从中获取信息,然后=用空格修剪值{}

但是,您没有使用 DSN,而是预定义配置的别名,存储在odbc.ini(通常位于类 unix 系统上的 /etc/odbc.ini 中)或 Windows 注册表(HKEY_CURRENT_USER\Software\ODBC\ODBC.INIHKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI)中。如果您使用的是 linux 并且可以访问 odbc.ini,则可以使用parse_ini_file对其进行解析:

$connectionInfo = parse_ini_file('/etc/odbc.ini', true);
var_dump($connectionInfo['JuniorDSN']);

如果您在 Windows 上,那么您必须从注册表中获取此信息,使用 COM 对象应该是可能的。

$shell = new COM("WScript.Shell");
$odbcServer = $shell->RegRead("HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\JuniorDSN\\Server");
于 2012-12-30T15:42:45.007 回答