与代码点火器一起使用时,ORA-01704字符串文字太长


ORA-01704 String literal too long when using with Code Igniter

目前我正在使用Code Igniter和Oracle数据库开发web应用程序。当我尝试为CLOB列插入长字符时,我得到错误

ORA-01704字符串文字过长

如何在CI中修复此问题?

假设我在oracle中有一张这样的表格

CREATE TABLE test(
   ID NUMBER,
   SUMMARY CLOB
)

当我尝试通过以下命令使用CI插入一行(SUMMARY列超过4000 cahr)时

$this->db->set('ID','123');
$this->db->set('SUMMARY','Very long text is here');
$this->db->insert('test');

我拿到了string literal is too long

我使用Oracle 10g

ORA-01704: string literal too long
Cause: The string literal is longer than 4000 characters.
Action: Use a string literal of at most 4000 characters.
Longer values may only be entered using bind variables.

当插入/更新长度超过4000个字符的CLOB值时,需要使用绑定参数。

我不是Code Igniter的用户,但检查Code Ignitr的数据库抽象类表明,它不使用准备好的语句和真实的变量绑定(BTW:我不会使用Code Ignitor框架,因为…)

因此,得出的结论是,使用CodeIgniter的助手进行数据库交互是无法完成您想要做的事情的,至少在不重写其部分代码的情况下是这样。我相信在这种特殊情况下,您必须使用"纯"PDO接口。