Informix 数据库函数库

发表于:2007-07-14来源:作者:点击数: 标签:
目前支持的 Informix 版本为 ODS 7.x、SE 7.x 与 Universal Server (IUS) 9.x 三种。在 ODS 7.x 的版本中,完全支持所有的资料类型,而在 IUS 9.x 中,不支持 SLOB 与 CLOB 二种类型。 要在 Web Server 上安装 Informix Client 端,在编译 PHP 之前 (configu

目前支持的 Informix 版本为 ODS 7.x、SE 7.x 与 Universal Server (IUS) 9.x 三种。在 ODS 7.x 的版本中,完全支持所有的资料类型,而在 IUS 9.x 中,不支持 SLOB 与 CLOB 二种类型。
要在 Web Server 上安装 Informix Client 端,在编译 PHP 之前 (configure 之前),要先设好 IFX_LIBDIR、IFX_LIBS 及 IFX_INCDIR 三种环境变量,若是 9.x 版尚要配置 HAVE_IFX_IUS 环境变量。同时在配置时要加入 --with_informix=yes 的选项。


ifx_connect: 打开 Informix 服务器连接。
ifx_pconnect: 打开 Informix 服务器持续连接。
ifx_close: 关闭 Informix 服务器连接。
ifx_query: 送出一个 query 字符串。
ifx_prepare: 准备 query 字符串。
ifx_do: 执行已准备 query 字符串。
ifx_error: 取得 Informix 最后的错误。
ifx_errormsg: 取得 Informix 最后错误信息。
ifx_affected_rows: 得到 Informix 最后操作影响的列数目。
ifx_getsqlca: 取得 query 后的 sqlca 信息。
ifx_fetch_row: 返回单列的各字段。
ifx_htmltbl_result: 将 query 返回资料转成 HTML 表格。
ifx_fieldtypes: 列出 Informix 的 SQL 字段。
ifx_fieldproperties: 列出 Informix 的 SQL 字段属性。
ifx_num_fields: 取得返回字段的数目。
ifx_num_rows: 取得返回列的数目。
ifx_free_result: 释放返回占用内存。
ifx_create_char: 建立字符类。
ifx_free_char: 删除字符类。
ifx_update_char: 更改字符类。
ifx_get_char: 取得字符类。
ifx_create_blob: 建立长位类。
ifx_copy_blob: 复制长位类。
ifx_free_blob: 删除长位类。
ifx_get_blob: 取得长位类。
ifx_update_blob: 更改长位类。
ifx_blobinfile_mode: 配置长位类模式。
ifx_textasvarchar: 配置文字模式默认值。
ifx_byteasvarchar: 配置位组模式默认值。
ifx_nullformat: 配置空字符模式默认值。
ifxus_create_slob: 建立 slob 类。
ifx_free_slob: 删除 slob 类。
ifxus_close_slob: 删除 slob 类。
ifxus_open_slob: 打开 slob 类。
ifxus_tell_slob: 返回目前文件或找寻位置。
ifxus_seek_slob: 配置目前文件或找寻位置。
ifxus_read_slob: 读取指定数目的 slob 类。
ifxus_write_slob: 将字符串写入 slob 类中。

ifx_connect
打开 Informix 服务器连接。
语法: int ifx_connect(string [database], string [userid], string [password]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数建立与 Informix 服务器的连接。其中所有的参数都可省略。若全部参数都省略时,使用系统的 php3.ini 或是 php.ini (视 PHP 版本决定) 中 ifx.default_host 指定的机器,或是环境变量 $INFORMIXSERVER;ifx.default_user 为用户帐号;ifx.default_password 为用户密码。而参数 database、userid 及 password 分别为数据库的名字、登入帐号及使用密码。当然,在使用本函数之后,尽早使用 ifx_close() 关闭 Informix 数据库比较好。连接成功则返回连接代码,失败则返回 false 值。
使用范例
本例只有连上数据库,什么事都没做。
<?php
$conn_id = ifx_pconnect("mydb@ol_srv1", "imyself", "mypassword");
ifx_close($conn_id);
?>
参考: ifx_pconnect() ifx_close()

ifx_pconnect
打开 Informix 服务器持续连接。
语法: int ifx_pconnect(string [database], string [userid], string [password]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数与 ifx_connect() 很类似。不同的地方在于使用本函数打开数据库时,程序会先寻找是否曾经执行过本函数,若执行过则返回先前执行的 ID。另一个不同的地方是本函数无法使用 ifx_close() 关闭数据库。
参考 ifx_connect() ifx_close()

ifx_close
关闭 Informix 服务器连接。
语法: boolean ifx_close(int [link_identifier]);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数关闭与 Informix 数据库服务器的连接。若无指定参数 link_identifier 则会关闭最后的一笔连接。用 ifx_pconnect() 连接则无法使用本函数关闭。本函数可以省略,当 PHP 整页程序结束后,将会自动关闭与数据库的非永久性 (non-persistent) 连接。返回值均为 true。

ifx_query
送出一个 query 字符串。
语法: int ifx_query(string query, int [link_identifier], int [cursor_type], mixed [blobidarray]);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数送出 query 字符串供 Informix 做相关的处理步骤。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 ID。参数 cursor_type 可省略,其值有 IFX_SCROLL 与 IFX_HOLD 二种。若有 BLOB 的字段要加在 query 指令之中,可使用 blobidarray 参数,指定 BLOB 的代码。
使用范例
例一:
<?php
// 之前的程序省略
ifx_textasvarchar(1); // 使用文字模式 (text mode) 的 blobs
$res_id = ifx_query("select * from orders", $conn_id);
if (! $res_id) {
printf("无法取出 orders 资料表 : %s\n<br>%s<br>\n", ifx_error());
ifx_errormsg();
die;
}
ifx_htmltbl_result($res_id, "border=\"1\"");
ifx_free_result($res_id);
// 之后的程序省略
?>
例二:
<?php
// 之前的程序省略
//
// 为二进位及文字建立 BLOB 代码
$textid = ifx_create_blob(0, 0, "Text column in memory");
$byteid = ifx_create_blob(1, 0, "Byte column in memory");

$blobidarray[] = $textid;
$blobidarray[] = $byteid;

$query = "insert into catalog (stock_num, manu_code, " ."cat_descr,cat_picture) values(1,'HRO',?,?)";
$res_id = ifx_query($query, $conn_id, $blobidarray);
if (! $res_id) {
// 错误处理
}
ifx_free_result($res_id);
// 之后程序省略
?>

ifx_prepare
准备 query 字符串。
语法: int ifx_prepare(string query, int link_identifier, int [cursor_type], mixed blobidarray);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数准备 query 字符串供 Informix 接着做相关的处理。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 ID。参数 cursor_type 可省略,其值有 IFX_SCROLL 与 IFX_HOLD 二种。若有 BLOB 的字段要加在 query 指令之中,可使用 blobidarray 参数,指定 BLOB 的代码。返回值可供 ifx_do() 使用。

ifx_do
执行已准备 query 字符串。
语法: boolean ifx_do(int result_id);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来执行已经由 ifx_prepare() 函数所准备的字符串。参数 result_id 即为 ifx_prepare() 所返回的待执行代码。成功则返回 true,失败返回 false 值。

ifx_error
取得 Informix 最后的错误。
语法: string ifx_error(void);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得 Informix 数据库最后的错误信息,本函数无须加入任何参数。返回的字符串如以下的格式
X [SQLSTATE=aa bbb SQLCODE=c]
其中的 X 代表错误信息的种类,见下粗体内容

字符 代表种类
空格 无错误
E 错误 (Error)
N 无资料
W 警告 (Warning)
? 其它未定义


至于 aa、bbb、c 表示数字资料,并分别为二位、三位及一位数。更多有关细节参考 Informix 手册中有关 SQLSTATE 与 SQLCODE 的信息。
参考: ifx_errormsg()

ifx_errormsg
取得 Informix 最后错误信息。
语法: string ifx_errormsg(int [errorcode]);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得 Informix 数据库最后的错误信息字符串。参数 errorcode 代表错误代码。
使用范例
本例为部份程序
<?php
printf("%s\n<br>", ifx_errormsg(-201));
?>
参考: ifx_error()

ifx_affected_rows
得到 Informix 最后操作影响的列数目。
语法: int ifx_affected_rows(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数可得到 Informix 最后查询操作 INSERT、UPDATE 或 DELETE 所影响的列 (row) 数目。若最后使用的是 SELECT,则用本函数得到的数目为估计值,而非精确的数目,欲得到 SELECT 返回的数目需使用 ifx_num_rows() 函数。
使用范例
本例为部份程序
<?php
$rid = ifx_prepare ("select * from userinfo where name like " . $name, $connid);
if (! $rid) {
// 错误处理的部份
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
printf ("返回资料太多,共 %d 笔\n<br>", $rowcount);
die ("请重新执行 SQL 指令<br>\n");
}
?>
参考: ifx_num_rows()

ifx_getsqlca
取得 query 后的 sqlca 信息。
语法: array ifx_getsqlca(int result_id);
返回值: 数组
函数种类: 数据库功能
内容说明: 本函数可得到 Informix 最后查询操作后的 sqlca 结构 (struct) 中的相关信息。参数 result_id 是经过 ifx_query() 及 ifx_prepare() 的返回代号。本函数返回的数组其实就是 sqlca.sqlerrd[0] 到 sqlca.sqlerrd[5] 等六个元素的数组。
使用范例
下例为部份程序
<?php
$qid = ifx_query("insert into sometable values(0, '2nd column', 'another column' ", $connid);
if (! $qid) {
// 错误处理
}
$sqlca = ifx_getsqlca ($qid);
$serial_value = $sqlca["sqlerrd1"];
echo "插入列序号为: " . $serial_value<br>n";
?>

ifx_fetch_row
返回单列的各字段。
语法: array ifx_fetch_row(int result_id, mixed [position]);
返回值: 数组
函数种类: 数据库功能
内容说明: 本函数用来将查询结果 result 之单列拆到数组变量中。数组的索引是数字索引,第一个的索引值是 0。若 result 没有资料,则返回 false 值。参数 position 可省略,是所谓的卷动游标 (scroll cursor),可能值为:NEXT、PREVIOUS、CURRENT、FIRST 或者 LAST;亦可能为数字,表示指定为第几列。
使用范例
以下的范例为连上 Informix 数据库后的步骤
<?php
$rid = ifx_prepare("select * from emp where name like ".$name, $connid, IFX_SCROLL);
if (! $rid) {
// 错误处理
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
printf ("返回资料太多,共 %d 笔\n<br>", $rowcount);
die ("请重新执行 SQL 指令<br>\n");
}
if (! ifx_do ($rid)) {
// 错误处理
}
$row = ifx_fetch_row($rid, "NEXT");
while (is_array($row)) {
for(reset($row); $fieldname=key($row); next($row)) {
$fieldvalue = $row[$fieldname];
printf("%s = %s,", $fieldname, $fieldvalue);
}
printf("\n<br>");
$row = ifx_fetch_row($rid, "NEXT");
}
ifx_free_result($rid);
?>

ifx_htmltbl_result
将 query 返回资料转成 HTML 表格。
语法: int ifx_htmltbl_result(int result_id, string [html_table_options]);
返回值: 整数
函数种类: 数据库功能
内容说明
本函数用来将 query 查询结果格式化成 HTML 标记格式的表格形式。参数 html_table_options 可省略,为 <table> 标记中的参数选项。成功则返回列数,失败则返回 false 值。
使用范例
以下的范例中,<table> 标记的参数设表格边宽为 2。
<?php
$rid = ifx_prepare("select * from emp where name like ".$name, $connid, IFX_SCROLL);
if (! $rid) {
// 错误处理
}
$rowcount = ifx_affected_rows($rid);
if ($rowcount > 1000) {
printf ("返回资料太多,共 %d 笔\n<br>", $rowcount);
die ("请重新执行 SQL 指令<br>\n");
}
if (! ifx_do($rid) {
// 错误处理
}
ifx_htmltbl_result($rid, "border=\"2\"");
ifx_free_result($rid);
?>

ifx_fieldtypes
列出 Informix 的 SQL 字段。
语法: array ifx_fieldtypes(int result_id);
返回值: 数组
函数种类: 数据库功能
内容说明
本函数可以获得 Informix 的 SQL 指令返回的字段。参数 result_id 是经过 ifx_query() 或 ifx_prepare() 的返回代号。
使用范例
本例为程序的一部份
<?php
$types = ifx_fieldtypes($resultid);
if (! isset($types)) {
// 错误处理
}
for ($i = 0; $i < count($types); $i++) {
$fname = key($types);
printf("%s :\t 类型为: %s\n", $fname, $types[$fname]);
next($types);
}
?>

ifx_fieldproperties
列出 Informix 的 SQL 字段属性。
语法: array ifx_fieldproperties(int result_id);
返回值: 数组
函数种类: 数据库功能
内容说明
本函数可以获得 Informix 的 SQL 指令返回字段的属性。参数 result_id 是经过 ifx_query() 或 ifx_prepare() 的返回代号。
使用范例
本例为程序的一部份
<?php
$properties = ifx_fieldtypes($resultid);
if (! isset($properties)) {
// 错误处理
}
for ($i = 0; $i < count($properties); $i++) {
$fname = key($properties);
printf("%s:\t type = %s\n", $fname, $properties[$fname]);
next($properties);
}
?>

ifx_num_fields
取得返回字段的数目。
语法: int ifx_num_fields(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数可以得到返回字段的数目。参数 result_id 是经过 ifx_query() 或 ifx_prepare() 的返回代号。若发生错误则返回 false 值。

ifx_num_rows
取得返回列的数目。
语法: int ifx_num_rows(int result_id);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数可以得到 Informix 数据库返回列的数目。参数 result_id 是经过 ifx_query() 或 ifx_do() 的返回代号。若发生错误则返回 false 值。

ifx_free_result
释放返回占用内存。
语法: boolean ifx_free_result(int result_id);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数可以释放目前 Informix 数据库 query 返回所占用的内存。一般只有在非常担心在内存的使用上可能会不足的情形下才会用本函数,因为 PHP 程序会在结束时自动释放。发生错误则返回 false 值。

ifx_create_char
建立字符类。
语法: int ifx_create_char(string param);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来建立字符 (char) 类。参数 param 为字符的内容。成功则返回字符的类代码,失败返回 false 值。

ifx_free_char
删除字符类。
语法: boolean ifx_free_char(int bid);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来删除字符 (char) 类。参数 bid 为字符的类代码。执行成功则返回 true 值,失败返回 false 值。

ifx_update_char
更改字符类。
语法: boolean ifx_update_char(int bid, string content);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来更改字符 (char) 类。参数 bid 为字符的类代码。参数 content 为欲使用的新字符。执行成功则返回 true 值,失败返回 false 值。

ifx_get_char
取得字符类。
语法: string ifx_get_char(int bid);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得字符 (char) 类。参数 bid 为字符的类代码。返回值为字符的内容。

ifx_create_blob
建立长位类。
语法: int ifx_create_blob(int type, int mode, string param);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来建立长位 (blob) 类。参数 type 表示 blob 的类型,1 表文字资料;0 表位资料。参数 mode 为长位资料的存放处,0 表在内存;1 表在文件中。参数 param 为 blob 的内容,若 mode 为 0 则为内存指针;若 mode 为 1 则为文件名。成功则返回长位的类代码,失败返回 false 值。

ifx_copy_blob
复制长位类。
语法: int ifx_copy_blob(int bid);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来复制长位 (blob) 类。参数 bid 为 blob 类代码。成功则返回新的长位类代码,失败返回 false 值。

ifx_free_blob
删除长位类。
语法: boolean ifx_free_blob(int bid);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来删除长位 (blob) 类。参数 bid 为 blob 类代码。执行成功则返回 true 值,失败返回 false 值。

ifx_get_blob
取得长位类。
语法: string ifx_get_blob(int bid);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来取得长位 (blob) 类。参数 bid 为长位的类代码。返回值为 blob 类的内容。

ifx_update_blob
更改长位类。
语法: boolean ifx_update_blob(int bid, string content);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来更改长位 (blob) 类。参数 bid 为 blob 类代码。参数 content 为欲使用新的 blob 资料。执行成功则返回 true 值,失败返回 false 值。

ifx_blobinfile_mode
配置长位类模式。
语法: boolean ifx_blobinfile_mode(int mode);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来配置所有 select 的 SQL 指令用到的长位 (blob) 类模式默认值。参数 mode 的值为储存 blob 资料的地点, 0 表在内存;1 表在文件中。执行成功则返回 true 值,失败返回 false 值。

ifx_textasvarchar
配置文字模式默认值。
语法: boolean ifx_textasvarchar(int mode);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来配置所有 select 的 SQL 指令用到的文字 (text) 类模式默认值。参数 mode 的值为 0 表返回 blob 的代码;1 表返回 varchar 字符串。执行成功则返回 true 值,失败返回 false 值。

ifx_byteasvarchar
配置位组模式默认值。
语法: boolean ifx_byteasvarchar(int mode);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来配置所有 select 的 SQL 指令用到的位组 (byte) 类模式默认值。参数 mode 的值为 0 表返回 blob 的代码;1 表返回 varchar 字符串。执行成功则返回 true 值,失败返回 false 值。

ifx_nullformat
配置空字符模式默认值。
语法: boolean ifx_nullformat(int mode);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来配置所有 select 的 SQL 指令用到的空字符 (null) 类模式默认值。参数 mode 的值为 0 表返回 "" (空字符串);1 表返回 NULL 字符串。执行成功则返回 true 值,失败返回 false 值。

ifxus_create_slob
建立 slob 类。
语法: int ifxus_create_slob(int mode);
返回值: 整数
函数种类: 数据库功能
内容说明
本函数用来建立 slob 类。参数 mode 值如下表

数值 常量
1 LO_RDONLY
2 LO_WRONLY
4 LO_APPEND
8 LO_RDWR
16 LO_BUFFER
32 LO_NOBUFFER


当然也 mode 可以直接使用常量值,如 IFX_LO_RDONLY。若有需要,可使用数字相加,使 mode 值更有变化。成功则返回 slob 的类代码,失败返回 false 值。

ifx_free_slob
删除 slob 类。
语法: boolean ifxus_free_slob(int bid);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来删除 slob 类。参数 bid 为 slob 类代码。执行成功则返回 true 值,失败返回 false 值。

ifxus_close_slob
删除 slob 类。
语法: boolean ifxus_close_slob(int bid);
返回值: 布尔值
函数种类: 数据库功能
内容说明: 本函数用来删除 slob 类。参数 bid 为 slob 类代码。执行成功则返回 true 值,失败返回 false 值。

ifxus_open_slob
打开 slob 类。
语法: int ifxus_open_slob(long bid, int mode);
返回值: 整数
函数种类: 数据库功能
内容说明
本函数用来打开 slob 类。参数 bid 为 slob 类代码。参数 mode 值如下表

数值 常量
1 LO_RDONLY
2 LO_WRONLY
4 LO_APPEND
8 LO_RDWR
16 LO_BUFFER
32 LO_NOBUFFER

当然也 mode 可以直接使用常量值,如 IFX_LO_RDONLY。若有需要,可使用数字相加,使 mode 值更有变化。成功则返回 slob 的类代码,失败返回 false 值。

ifxus_tell_slob
返回目前文件或找寻位置。
语法: int ifxus_tell_slob(long bid);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数返回目前文件或者找寻文件的位置。参数 bid 为 slob 类代码。执行成功则返回代码值,失败返回 false 值。

ifxus_seek_slob
配置目前文件或找寻位置。
语法: int ifxus_seek_blob(long bid, int mode, long offset);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数用来配置目前文件或找寻文件的位置。参数 bid 为 slob 类代码。参数 mode 的值如下:0 表 LO_SEEK_SET、1 表 LO_SEEK_CUR、2 表 LO_SEEK_END。参数 offset 为位组偏移值。执行成功则返回代码值,失败返回 false 值。

ifxus_read_slob
读取指定数目的 slob 类。
语法: string ifxus_read_slob(long bid, long nbytes);
返回值: 字符串
函数种类: 数据库功能
内容说明: 本函数用来读取指定位数的 slob 类。参数 bid 为 slob 类代码。参数 nbytes 为位组数目。执行成功则返回 slob 部份字符串,失败返回 false 值。

ifxus_write_slob
将字符串写入 slob 类中。
语法: int ifxus_write_slob(long bid, string content);
返回值: 整数
函数种类: 数据库功能
内容说明: 本函数将指定字符串写入 slob 类之中。参数 bid 为 slob 类代码。参数 content 为待写入字符串。执行成功则返回写入字符数,失败返回 false 值。

原文转自:http://www.ltesting.net