在php中读取oracle的clob字段出现内容丢失问题的解决

环境:php+oracle12
         数据表中有一个字段是clob字段,里面存储的是一个2M左右的html文档(html中有图片,有表格)

最开始的时候,读取该字段,使用的是pdo的方法,如下:
        $strsql = "select content from talentinfo where TID = '$tid'";    
        $res = $pdo->query($strsql); 
        if($res == false)
            print_r($pdo->errorInfo());            
        $res->setFetchMode(PDO::FETCH_ASSOC);
        $results = $res->fetch();  
        is_resource($results['content ']) && $results['content '] =stream_get_contents($results['content ']);

刚开始一直没有发现有啥问题,后来系统发布后,使用过程发现,前端用kindeditor呈现的内容,个别地方出现有html的标签。
仔细对比了下写入到kindeditor的html内容和存入数据表clob字段的内容,发现不知名的条件下,有丢信息的地方。
折腾了好长时间,后来深入分析,发现是stream_get_contents读取的数据流丢了内容。

后来看资料说是oci可以直接操作clob数据,就改为oci的方法:
$strsql = "select content from talentinfo where TID = '$tid'";
$conn = oci_connect("user","pwd","ip:port/ORCL");
$stmt = OCIParse($conn, $strsql);
OCIExecute($stmt);
$results['content '] = '';
if (OCIFetchInto($stmt, $result, OCI_ASSOC+OCI_RETURN_LOBS))  
{  
echo $result['content '];
}  
OCIFreeStatement($stmt);  
OCILogoff($conn);  

问题解决。

备注,
有一点没有搞明白,最开始的时候,php中进行数据库操作,使用的就是oci,但oci在做数据查找时,感觉很慢,有人建议使用pdo来操作数据库,同一个select语句(返回前面40条记录),pdo确实比oci要快了一个数量级。
但经过这个问题的解决后,发现oci的一些功能,pdo没有完全继承下来, 不知道是pdo本身的问题,还是我使用的问题,有遇到的人可以帮忙澄清下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值