无法通过php连接到informix数据库
这就是我到目前为止所做的 为了将我的网站连接到informix数据库,我安装了informix客户端SDK,并通过Setnet32输入服务器和主机信息,当通过ConnectTest Demo进行测试时,连接正常 然后,通过windows中的ODBC数据源管理器,我创建了用户DSN和系统DSN,并测试了连接 现在我创建了一个连接字符串,如下所示:无法通过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
$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文件中?