从DSN-less字符串获取连接详细信息


Get connection details from DSN-less string

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

$dsn = $_GET['dsn'];
$conn=odbc_connect($dsn,'','');
<<p> 更新代码/strong>
$dsn = "JuniorDSN";
$conn=odbc_connect($dsn,'','') or die ("Can't connect to DSN");
$dsnarray = explode(";",$dsn);
$dsn0 = $dsnarray[0];
echo $dsn0;

典型的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");