Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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连接到informix数据库_Php_Database_Pdo_Informix - Fatal编程技术网

无法通过php连接到informix数据库

无法通过php连接到informix数据库,php,database,pdo,informix,Php,Database,Pdo,Informix,这就是我到目前为止所做的 为了将我的网站连接到informix数据库,我安装了informix客户端SDK,并通过Setnet32输入服务器和主机信息,当通过ConnectTest Demo进行测试时,连接正常 然后,通过windows中的ODBC数据源管理器,我创建了用户DSN和系统DSN,并测试了连接 现在我创建了一个连接字符串,如下所示: $dbh = new PDO("odbc:Driver={IBM INFORMIX ODBC DRIVER};HOSTNAME=172.56.100.1

这就是我到目前为止所做的

为了将我的网站连接到informix数据库,我安装了informix客户端SDK,并通过Setnet32输入服务器和主机信息,当通过ConnectTest Demo进行测试时,连接正常

然后,通过windows中的ODBC数据源管理器,我创建了用户DSN和系统DSN,并测试了连接

现在我创建了一个连接字符串,如下所示:

$dbh = new PDO("odbc:Driver={IBM INFORMIX ODBC DRIVER};HOSTNAME=172.56.100.12;PORT=8056;DATABASE=eadmin;PROTOCOL=onsoctcp; UID=prsnl;PWD=prsnl;");
在本例中,在尝试登录时,我得到的错误如下:

PDOException: invalid data source name 
$query = "select decrypt_char(passwd,'" . $_POST['passwd'] . "') from edak_users where userid='" . $_SESSION['username'] . "'";

$tt = $dbh->query($query);

$rs=$tt->fetch(PDO::FETCH_NUM);
pdo异常:SQLSTATE[HY000]SQLDriverConnect:-11060[Informix][Informix-ODBC-Driver]一般错误。

我尝试了另一个如下的连接字符串:

$dbh=newpdo(“Dsn=bnm_info;Driver={IBM INFORMIX ODBC Driver};HOSTNAME=172.56.100.12;PORT=8056;DATABASE=eadmin;PROTOCOL=onscoctcp;UID=prsnl;PWD=prsnl;”

在这种情况下,我得到的错误如下:

PDOException: invalid data source name 
$query = "select decrypt_char(passwd,'" . $_POST['passwd'] . "') from edak_users where userid='" . $_SESSION['username'] . "'";

$tt = $dbh->query($query);

$rs=$tt->fetch(PDO::FETCH_NUM);
为了让事情更清楚,访问数据库的代码如下:

PDOException: invalid data source name 
$query = "select decrypt_char(passwd,'" . $_POST['passwd'] . "') from edak_users where userid='" . $_SESSION['username'] . "'";

$tt = $dbh->query($query);

$rs=$tt->fetch(PDO::FETCH_NUM);
请提出一个解决方案,让我度过难关,因为这个问题快把我逼疯了

欢迎任何帮助。 提前感谢

示例#1使用odbc.ini的PDO\U INFORMIX DSN示例

[Infdrv33]
Driver=/opt/informix/csdk_2.81.UC1G2/lib/cli/iclis09b.so
Description=INFORMIX 3.3 32-BIT
Database=common_db
LogonID=testuser
pwd=testpass
Servername=ids_server
DB_LOCALE=en_US.819
OPTIMIZEAUTOCOMMIT=1
ENABLESCROLLABLECURSORS=1
以下示例显示了一个
PDO_INFORMIX DSN
,用于连接到
odbc.ini
中编目为Infdrv33的INFORMIX数据库:

Php

$db = new PDO("informix:DSN=Infdrv33", "", "");
[ODBC Data Sources]
Infdrv33=INFORMIX 3.3 32-BIT
Odbc.ini

[Infdrv33]
Driver=/opt/informix/csdk_2.81.UC1G2/lib/cli/iclis09b.so
Description=INFORMIX 3.3 32-BIT
Database=common_db
LogonID=testuser
pwd=testpass
Servername=ids_server
DB_LOCALE=en_US.819
OPTIMIZEAUTOCOMMIT=1
ENABLESCROLLABLECURSORS=1
示例#2使用连接字符串的PDO#U INFORMIX DSN示例

下面的示例显示了一个
PDO_INFORMIX DSN
,用于使用INFORMIX连接字符串语法连接到名为
common_db
的INFORMIX数据库

$db = new PDO("informix:host=host.domain.com; service=9800;
    database=common_db; server=ids_server; protocol=onsoctcp;
    EnableScrollableCursors=1", "testuser", "tespass");

您是否尝试过更简单的连接字符串:

$dbh = new PDO("DSN=bnm_info;UID=prsnl;PWD=prsnl;");
如果您使用的是Win64,请确保在适当的
odbcad32.exe
中定义了DSN。一个用于32位应用程序,另一个用于64位应用程序


如果您的ODBC是从
odbcad32.exe
运行的,那么它应该可以使用这样简单的连接字符串。

如果您试图在Windows上运行此操作,请忘记ODBC.ini,在Windows上,该信息存储在注册表中

初始-11060常规错误的原因是连接字符串(服务器)中缺少一个关键参数

没有它(像您那样使用无DSN连接)

SERVER应该是Informix服务器的名称(通常是INFORMIXSERVER环境变量的值)

如果已经将Informix服务器信息放入注册表(使用setnet32),则无需指定ODBC连接字符串中的所有参数。 你可以做:

$dbh = new PDO("odbc:Driver={IBM INFORMIX ODBC DRIVER};SERVER=ids1210;DATABASE=sysmaster;UID=informix;PWD=ximrofni;");
驱动程序将从注册表中选取其余的值

此外,如前所述,如果已经创建了ODBC DSN,则可以直接引用该DSN。像这样:

$dbh = new PDO("odbc:DSN=ids1210_32;UID=informix;PWD=ximrofni;");
请记住,如果您的PHP(模块)是64位的,则需要创建一个64位ODBC DSN,或者在无DSN连接字符串中使用“{IBM INFORMIX ODBC DRIVER(64位)}”作为驱动程序名称


如果您不想在注册表中存储任何内容,但使用哪一个取决于您自己,则“DSN less”选项(所有参数包括驱动程序名称)非常有用;)

就问题而言,查询是不相关的——您甚至没有连接到数据库,因此查询永远不会有机会执行。这是一件好事,因为您容易受到攻击,请建议如何通过odbc连接到数据库您的意思是我需要将示例1中的语句添加到odbc.ini文件中?