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

时间:2012-12-30 13:17:21

标签: php odbc

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

$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;

1 个答案:

答案 0 :(得分: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.INI或{{ 1}})。如果您使用的是linux并且可以访问odbc.ini,则可以使用parse_ini_file解析它:

HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI

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

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