From ce8ad5107058a071852da47eee10728fa8f6f5b7 Mon Sep 17 00:00:00 2001 From: Aleksey Katargin Date: Thu, 5 Jan 2017 00:33:49 +0500 Subject: [PATCH] Fix bug #55138 PDO OCI cannot insert more than 1332 bytes --- ext/pdo_oci/oci_statement.c | 7 ++----- ext/pdo_oci/tests/bug55138.phpt | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 ext/pdo_oci/tests/bug55138.phpt diff --git a/ext/pdo_oci/oci_statement.c b/ext/pdo_oci/oci_statement.c index 5d34957885256..be708d6de9674 100644 --- a/ext/pdo_oci/oci_statement.c +++ b/ext/pdo_oci/oci_statement.c @@ -333,11 +333,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 = (sb4) param->max_value_len; - if (param->max_value_len == 0) { - value_sz = (sb4) 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)