如何在oracle中使用PHP更新LOB?(OCI\u无效\u句柄)
我正在尝试以与插入相同的方式更新a(C)LOB。(插入已在工作)如何在oracle中使用PHP更新LOB?(OCI\u无效\u句柄),php,oracle,oracle11g,Php,Oracle,Oracle11g,我正在尝试以与插入相同的方式更新a(C)LOB。(插入已在工作) 这不会更新lob,并给出一个:PHP警告:OCI lob::save():OCI\u INVALID\u HANDLE in file.PHP在第123行有几十个示例说明如何使用lob值插入/更新行 首先,您必须创建一个LOB描述符: $desc=oci\u new\u描述符($connection,oci\u DTYPE\u LOB); 然后将此描述符用作LOB占位符的绑定值: 按名称($queryHandle,“:retco
这不会更新lob,并给出一个:
PHP警告:OCI lob::save():OCI\u INVALID\u HANDLE in file.PHP在第123行
有几十个示例说明如何使用lob
值插入/更新行
首先,您必须创建一个LOB
描述符:
$desc=oci\u new\u描述符($connection,oci\u DTYPE\u LOB);
然后将此描述符用作LOB
占位符的绑定值:
按名称($queryHandle,“:retcol1”,$desc,-1,SQLT\u CLOB)绑定oci;
然后临时写入数据:
$desc->writeTemporary($data);
然后执行这个查询
更多信息请访问+仔细阅读所有评论以获取更多示例
一些示例使用
$desc->write($data)
+execute+commit,有些使用execute+$desc->saveFile($data)代码>+commit,所有都应该工作。正如PLB所说:由于主键值错误,更新查询没有更新任何行。这导致出现php警告消息
文档中提到了这一点:如果在update语句中使用Save(),则如果update语句未捕获带有where子句的任何行,PHP将抛出类似于“OCILobWrite:OCI\U INVALID\U HANDLE…”的警告。
所以在更新数据库之前,您需要确保您的条件匹配。在您的示例中,$queryHandle
对保存有效。谢谢。确实是这个问题。:-)
$queryHandle = oci_parse($dbHandle, "update MYTABLE set "MYCLOB" = EMPTY_CLOB() , "OTHERCOL" = :col0 where "PKIDCOL" = :wherecol0 returning "OTHERCOL" , "MYCLOB", into :retcol0 , :retcol1");
if(!is_resource($queryHandle)) {
$error=oci_error($dbHandle);
die($error['message'], $error['code']);
}
oci_bind_by_name($queryHandle, ":col0", $othercolvalue);
oci_bind_by_name($queryHandle, ":wherecol0", $pkidcol);
oci_bind_by_name($queryHandle, ":retcol0", $retcol1, 100);
$lob=oci_new_descriptor($dbHandle);
oci_bind_by_name($queryHandle, ":retcol1", $lob, -1, SQLT_CLOB);
if(!oci_execute($queryHandle , OCI_NO_AUTO_COMMIT)) {
$error=oci_error($dbHandle);
die($error['message'], $error['code']);
}
$lob->save($mylobvalue); // gives an PHP Warning: OCI-Lob::save(): OCI_INVALID_HANDLE in file.php on line 123