分类:
2008-04-17 17:50:59
目前支持的 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 值。
使用范例
本例只有连上数据库,什么事都没做。
$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 的代码。
使用范例
例一:
// 之前的程序省略
ifx_textasvarchar(1); // 使用文字模式 (text mode) 的 blobs
$res_id = ifx_query("select * from orders", $conn_id);
if (! $res_id) {
printf("无法取出 orders 资料表 : %s\n
%s
\n", ifx_error());
ifx_errormsg();
die;
}
ifx_htmltbl_result($res_id, "border=\"1\"");
ifx_free_result($res_id);
// 之后的程序省略
?>
例二:
// 之前的程序省略
//
// 为二进位及文字建立 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 代表错误代码。
使用范例
本例为部份程序
printf("%s\n
", 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() 函数。
使用范例
本例为部份程序
$rid = ifx_prepare ("select * from userinfo where name like " . $name, $connid);
if (! $rid) {
// 错误处理的部份
}
$rowcount = ifx_affected_rows ($rid);
if ($rowcount > 1000) {
printf ("返回资料太多,共 %d 笔\n
", $rowcount);
die ("请重新执行 sql 指令
\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] 等六个元素的数组。
使用范例
下例为部份程序
$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
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 数据库后的步骤
$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
", $rowcount);
die ("请重新执行 sql 指令
\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
");
$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 可省略,为