diff options
author | Anatol Belski <ab@php.net> | 2018-01-22 17:02:54 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2018-01-22 17:02:54 +0100 |
commit | 2384ade53c9ddb45b56e803a8d8494737732b84b (patch) | |
tree | b44b02fa12c90a3b880a9ed54be2742e0c93e133 | |
parent | fb205020ce2dd97d777e09d2debf38a01075d370 (diff) | |
download | php-git-2384ade53c9ddb45b56e803a8d8494737732b84b.tar.gz |
Fixed bug #73725 Unable to retrieve value of varchar(max) type
-rw-r--r-- | ext/odbc/php_odbc.c | 7 | ||||
-rw-r--r-- | ext/odbc/tests/bug73725.phpt | 55 |
2 files changed, 62 insertions, 0 deletions
diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 918c7bbf97..514b8de74d 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -1027,6 +1027,13 @@ int odbc_bindcols(odbc_result *result) break; } #endif + /* Workaround for drivers that report VARCHAR(MAX) columns as SQL_VARCHAR (bug #73725) */ + if (SQL_VARCHAR == result->values[i].coltype && displaysize == 0) { + result->values[i].coltype = SQL_LONGVARCHAR; + result->values[i].value = NULL; + break; + } + /* Workaround for Oracle ODBC Driver bug (#50162) when fetching TIMESTAMP column */ if (result->values[i].coltype == SQL_TIMESTAMP) { displaysize += 3; diff --git a/ext/odbc/tests/bug73725.phpt b/ext/odbc/tests/bug73725.phpt new file mode 100644 index 0000000000..f0ab6ccc9a --- /dev/null +++ b/ext/odbc/tests/bug73725.phpt @@ -0,0 +1,55 @@ +--TEST-- +Bug #73725 Unable to retrieve value of varchar(max) type +--SKIPIF-- +<?php include 'skipif.inc'; ?> +--FILE-- +<?php + +include dirname(__FILE__) . "/config.inc"; + +$conn = odbc_connect($dsn, $user, $pass); + +odbc_do($conn, "CREATE TABLE bug73725(i int, txt varchar(max), k int)"); + +odbc_do($conn, "INSERT INTO bug73725 VALUES(101,'Any text', 33)"); +odbc_do($conn, "INSERT INTO bug73725 VALUES(102,'Müsliriegel', 34)"); + +$rc = odbc_do($conn, "SELECT i, txt, k FROM bug73725"); + +$r = odbc_fetch_array($rc); +var_dump($r); + +$r = odbc_fetch_array($rc); +var_dump($r); + +?> +==DONE== +--EXPECT-- +array(3) { + ["i"]=> + string(3) "101" + ["txt"]=> + string(8) "Any text" + ["k"]=> + string(2) "33" +} +array(3) { + ["i"]=> + string(3) "102" + ["txt"]=> + string(12) "Müsliriegel" + ["k"]=> + string(2) "34" +} +==DONE== +--CLEAN-- +<?php +include 'config.inc'; + +$conn = odbc_connect($dsn, $user, $pass); + +odbc_exec($conn, 'DROP TABLE bug73725'); + +odbc_close($conn); + +?> |