Can't insert more than 4000 characters to Oracle clob column by yii2 DAO

I’m using php 7.0.20 and the latest version 2.0.12 of Yii, working with Oracle 11g.

When I try to insert a record with the code below.




$str_more_than_4000 = 'UGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlUGx1Z2luIHNvdXJjZSBpcyBBpcyBBpcyBBpcyBBpcyBBpcyBBpcyBBpcyB';

//insert

Yii::$app->getDb()->createCommand()->insert('TABLE_A',['CLOB_COLUMN'=>$str_more_than_4000])->execute();

//batchInsert

Yii::$app->getDb()->createCommand()->batchInsert('TABLE_A',['CLOB_COLUMN'],[[$str_more_than_4000]])->execute();



After execute we will generate the error:

Error Info: Array

(

[0] => HY000


[1] => 1704


[2] => OCIStmtExecute: ORA-01704: string literal too long.

(ext\pdo_oci\oci_statement.c:148)

)


After google, I know use pdo and bindParam can success insert long string.




$pdo = Yii::$app->db->pdo;

$stmt = $pdo->prepare("INSERT INTO TABLE_A (CLOB_COLUMN) VALUES (:p1)");

$stmt->bindParam(":p1", $str_more_than_4000 , \PDO::PARAM_STR, strlen($str_more_than_4000 )); //ok

//$stmt->bindValue(":p1", $str_more_than_4000 , \PDO::PARAM_STR);//fail

$stmt->execute()



Can anybody give some suggestion on insert long string(more than 4000) with Yii?

Looks like an issue that is worth reporting and fixing. Please add it to https://github.com/yiisoft/yii2/issues