Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从DSN less字符串获取连接详细信息_Php_Odbc - Fatal编程技术网

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

Php 从DSN less字符串获取连接详细信息,php,odbc,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; 典型的DSN如下所示: Driver

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

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

典型的DSN如下所示:

Driver={Driver name with space hence curly braces};dbname=testdb
所以它是由分号分隔的
parameter=value
对。您只需通过
分解字符串即可从中获取信息
然后
=
,并从
{}

但是,您不是在使用DSN而是在预定义配置中使用别名,这些配置存储在
odbc.ini
(在类unix系统上通常位于/etc/odbc.ini)或windows注册表(
HKEY\u CURRENT\u USER\Software\odbc\odbc.ini
HKEY\u LOCAL\u MACHINE\Software\odbc\odbc.ini
)中。如果您使用的是linux,并且可以访问odbc.ini,则可以使用以下方法对其进行解析:

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

$shell = new COM("WScript.Shell");
$odbcServer = $shell->RegRead("HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\JuniorDSN\\Server");

是的,这是可能的。现在您已经意识到了这一点,可以尝试这样做。在看不到任何其他代码的情况下,从
$\u GET/$\u POST/anywyere
检索dsn字符串似乎是个糟糕的主意。它可能允许您的网站提供其他人的数据,或者更糟的是,欺骗您的用户将其数据存储到未知的第三方。DSN字符串通常是
key=value
对分隔。所以
explode()
打开
=
执行
分解()
,以提取所需的值。或者使用正则表达式。@Michael Berkowski-这是一个只对管理员开放的内部网站。我在干什么?如果我首先使用更新的代码,我得到的就是字符串“Junior DSN”。如果我在$conn上爆炸,我会得到一个资源id错误。@dev null-allender-不需要天才就能看到这个隐式问题。但为了你的利益:如何?工作完美。谢谢你的帮助。我在“HKEY\U LOCAL\u MACHINE\\SOFTWARE\\ODBC\\ODBC.INI\\JuniorDSN\\DBQ”中找到了它
$shell = new COM("WScript.Shell");
$odbcServer = $shell->RegRead("HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\JuniorDSN\\Server");