1 回答

TA贡献1725条经验 获得超8个赞
PDO 和 OCI8 扩展无法按照您想要的方式相互交互。更具体地说,PDOStatement::execute()需要一个扁平的值数组,这些值要么是字符串,要么可以转换为字符串。该类OCI-Lob没有实现__toString()魔术方法,因此出现错误。
我已经有一段时间没有使用 OCI8 了,我不记得是否有办法将 LOB 作为纯字符串返回(这是一种选择),但自己渲染字符串非常简单:
while (($row2 = oci_fetch_array($requete2, OCI_NUM+OCI_RETURN_NULLS)) != false) {
$row2[1] = $row2[1]->load();
$stmt2->execute($row2);
}
...或者这个(根据你的喜好):
while (($row2 = oci_fetch_array($requete2, OCI_NUM+OCI_RETURN_NULLS)) != false) {
$stmt2->execute(
[
$row2[0],
$row2[1]->load(),
$row2[2],
]
);
}
请注意,这是内存密集型的,因为您要将完整的 LOB 加载到 RAM 中。如果您需要操作较大的值,则必须研究PDO LOB。
此外,当您向 oracle 表添加更多列或更改它们的位置时,此代码将中断。我建议您SELECT *用适当的列列表替换。
- 1 回答
- 0 关注
- 214 浏览
添加回答
举报