diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c index 4e341c08bebff..61646e8f4b0ad 100644 --- a/ext/pdo_oci/oci_statement.c +++ b/ext/pdo_oci/oci_statement.c @@ -301,11 +301,8 @@ static int oci_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data *pa case PDO_PARAM_STR: default: P->oci_type = SQLT_CHR; - value_sz = param->max_value_len; - if (param->max_value_len == 0) { - value_sz = 1332; /* maximum size before value is interpreted as a LONG value */ - } - + /* we can provide as much data as value_sz can fit */ + value_sz = SB4MAXVAL; } if (param->name) { diff --git a/ext/pdo_oci/tests/bug55138.phpt b/ext/pdo_oci/tests/bug55138.phpt new file mode 100644 index 0000000000000..bfa31280f2c37 --- /dev/null +++ b/ext/pdo_oci/tests/bug55138.phpt @@ -0,0 +1,27 @@ +--TEST-- +PDO OCI Bug #55138 (cannot insert more than 1332 one byte chars in al32utf8 varchar2 field) +--SKIPIF-- + +--FILE-- +exec("CREATE TABLE test(test VARCHAR2(2000))"); +$statement = $db->prepare("INSERT INTO test VALUES(:test)"); +$test = str_repeat("F", 2000); +$statement->bindParam(":test", $test); +$result = $statement->execute(); +var_dump($result); + +$data = $db->query('SELECT * FROM test')->fetchAll(); +$result = ($test === $data[0][0]); +var_dump($result); +--EXPECTF-- +bool(true) +bool(true)