gpt4 book ai didi

PHP stream_get_contents() 从数据库读取 LOB 时表现异常

转载 作者:行者123 更新时间:2023-12-05 04:12:01 24 4
gpt4 key购买 nike

我在一个表中有 2 条记录,它们具有相似的 CLOB 数据。其中每一个都从查询中解析出来,然后由 php 在循环中针对返回的 PDO::FETCH_ASSOC 读入字符串

查询返回结果后是这样的:

ID   |   NAME   |   DESCRIPTION   |   LOB_DEFINITION
4409 foo blah blah long text that is stored in a lob ~ 5k characters
4410 foobar blah blah some other long text stored in a lob ~ 5k characters

我的问题是,一旦我开始遍历它并从 LOB 中读取内容,它们就不会“重置”因此,读取的所有对象都将与它读取的第一个 LOB 具有相同的值:

像这样:

foreach($result as $r) {
$lob = stream_get_contents($r['LOB_DEFINITION']);
echo $r['ID'].'-<i>'.$lob.'</i><HR>';
unset($lob);
}

结果如下所示:

4409-存储在 lob ~ 5k 字符中的长文本


4410-存储在 lob ~ 5k 字符中的长文本

而不是我期望得到的是:

4409-存储在 lob ~ 5k 字符中的长文本


4410-一些其他长文本存储在 lob ~ 5k 字符中

我也检查了资源 ID,它们是不同的资源...

我在这里不知所措...有人对这个问题有见解吗?

最佳答案

几个小时的研究结果如下:

从其中一列是 clob 数据类型的 oracle 表返回多记录集将导致检索到的最后一条记录 clob 是检索到的所有 clob 的值。这就是导致上述行为的原因。

我最终解决这个问题的方法是:

选择我计划使用 clob 的所有记录(不是 clob 本身,只是记录 ID)

然后我循环遍历这些记录 ID,并通过单独的数据库调用使用主键逐一处理 CLOB 数据以拉入记录,以确保不超过 1 条记录返回 clob 数据。所以本质上这是现在正在发生的事情:

在从表中检索到我想要使用的所有 clob 的 ID 后,我这样解析它们:

foreach($result as $r) {
$query = 'select lob_definition from mytable where id = '.$r;
$lobresult = oracleConnection->query($query)->fetchAll(FETCH_COLUM);
$lob = stream_get_contents($lobresult);
echo $r['ID'].'-<i>'.$lob.'</i><HR>';
unset($lob);
}

达到那种效果的东西已经解决了我的问题(所有这些都是用各种方法抽象出来的,但本质上这就是正在发生的事情。

关于PHP stream_get_contents() 从数据库读取 LOB 时表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41387557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com