环境: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本身的问题,还是我使用的问题,有遇到的人可以帮忙澄清下。
数据表中有一个字段是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本身的问题,还是我使用的问题,有遇到的人可以帮忙澄清下。