0

我有一个将 html 模板保存为 oracle DB 中的 clob 的应用程序。
当我更新以前保存的 HTML时, 会变成??.

$sql = "UPDATE headers 
        SET header_code = :HEADER_CODE
        WHERE header_ID = :HEADER_ID ";
...

oci_bind_by_name($stid, ':HEADER_CODE', $form_qs['HEADER_CODE']); 
oci_bind_by_name($stid, ':HEADER_ID', $form_qs['HEADER_ID']); 
...

oracle 版本信息:
Oracle 数据库 10g 企业版版本 10.2.0.4.0 - 64bi
PL/SQL 版本 10.2.0.4.0 - 用于 Solaris 的生产
“CORE 10.2.0.4.0 生产”
TNS:版本 10.2.0.4.0 - 生产
NLSRTL版本 10.2.0.4.0 - 生产

PHP 版本 5.2.6

4

2 回答 2

1

好的,在 datasage 让我意识到这是一个编码问题而不是数据库问题之后,我重新关注我的谷歌搜索,发现它是文本框(以及我的 enctype)正在转换   变成 2 个字符的 Unicode(我回显了 strlen($form_qs['HEADER_CODE']))。

话虽如此,我现在将 & 替换为 & 所以文本框将显示   不是空格。我希望解决方案不会把其他事情搞砸,但时间会证明一切。

str_replace('&','&',$form_qs['HEADER_CODE']);

(感谢 DoSparKot 和 nickb 的格式化帮助)

于 2013-02-27T16:01:36.617 回答
0

我不确定您的代码中是否存在语法错误,但是您可以使用oci_new_descriptor()它为 CLOB 打开一个新描述符

<?php
$clob = oci_new_descriptor ($conn, OCI_D_LOB);
oci_bind_by_name ($stid, ':HEADER_CODE', $clob, -1, OCI_B_CLOB);
$clob->write  ($form_qs['HEADER_CODE']);

oci_bind_by_name($stid, ':HEADER_ID', $form_qs['HEADER_ID']);

//after execution/commit
$clob->free();
?>

OCI_D_LOB:LOB类型的数据

OCI_B_CLOB: CLOB 类型的绑定

于 2013-02-26T20:02:55.900 回答