$query = "UPDATE testcases
SET testcase_name='$testcase_name',
testcase_description=EMPTY_CLOB(), testcase_steps=EMPTY_CLOB()
WHERE id='$testcase_id' RETURNING
testcase_description,testcase_steps INTO :tdesc,
:tsteps";
$conn = oci_connect($username,$password,$db,'UTF8');
$result = @oci_parse($conn,$query);$tdesc_clob = @oci_new_descriptor($conn,
OCI_D_LOB);
$tsteps_clob = @oci_new_descriptor($conn,
OCI_D_LOB);@oci_bind_by_name($result, ":tdesc", $tdesc_clob, -1,
OCI_B_CLOB);
@oci_bind_by_name($result, ":tsteps", $tsteps_clob, -1,
OCI_B_CLOB);
@oci_execute($result,OCI_DEFAULT);
if ($tdesc_clob->save($testcase_description)
&&
$tsteps_clob->save($testcase_steps) )
{
@oci_commit($conn);
}
1. oci_bind_by_name ( resource stmt, string ph_name, mixed
&variable [, int maxlength [, int type]]
)
上面这段是以前的代码,现在看了一下手册,发现OCI_B_CLOB被SQLT_CLOB代替了,所以上面的oci_bind_by_name方法最后一个参数最好写SQLT_CLOB,当然写OCI_B_CLOB也能用。
在oci_bind_by_name中,最后一个参数用什么值当然跟你要绑定的数据类型有关系,这里我们是CLOB,所以用OCI_B_CLOB(或SQLT_CLOB).
如果是其他类型,那么可参考一下对应关系:
SQLT_FILE -
对应于 BFILE
SQLT_CFILE - 对应于 CFILE
SQLT_CLOB - 对应于 CLOB
SQLT_BLOB - 对应于 BLOB
SQLT_ROWID - 对应于 ROWID
SQLT_NTY - 对应于有名字的数据类型
SQLT_INT -
对应于 integers
SQLT_CHR - 对应于 VARCHARs
SQLT_BIN - 对应于 RAW 列
SQLT_LNG - 对应于 LONG 列
SQLT_LBI - 对应于 LONG RAW 列
SQLT_RSET - 对应于游标
已经过时的OCI_B_*和SQLT_*的对应关系是:
OCI_B_NTY -
SQLT_NTY
OCI_B_BFILE - SQLT_BFILEE
OCI_B_CFILEE - SQLT_CFILEE
OCI_B_CLOB -
SQLT_CLOB
OCI_B_BLOB -
SQLT_BLOB
OCI_B_ROWID - SQLT_RDD
OCI_B_CURSOR - SQLT_RSET
OCI_B_BIN - SQLT_BIN
OCI_B_INT - SQLT_INT
2. oci_new_descriptor( resource connection [, int type] )
oci_new_descriptor是初始化一个新的空 LOB 或
FILE 描述符,它的最后一个参数type的取值只有3种:OCI_D_FILE, OCI_D_LOB 以及
OCI_D_ROWID
附:对其他类型的绑定变量用法
$query = "select * from
testcases where project_id = :current_project_id and milestone_id =
:current_milestone_id"; $conn = oci_connect($username,$password,$db,'UTF8');
$result = oci_parse($conn, $query);
oci_bind_by_name($result, ":current_project_id",
$_SESSION['project_id'], -1, SQLT_INT );
oci_bind_by_name($result, ":current_milestone_id",
$first_milestone, -1, SQLT_INT
); oci_execute($result);
对于数字,用SQLT_INT(OCI_B_INT)和SQLT_CHR都行。