diff options
author | Christopher Jones <sixd@php.net> | 2008-08-28 06:19:45 +0000 |
---|---|---|
committer | Christopher Jones <sixd@php.net> | 2008-08-28 06:19:45 +0000 |
commit | c5aa4a138e4b806aaea4342c749b24addd95d1da (patch) | |
tree | 8ae251607626f68a023ec0af22b2035f76b713c9 | |
parent | 38b404fcb6006753d67288f2cd790abbbf26ff42 (diff) | |
download | php-git-c5aa4a138e4b806aaea4342c749b24addd95d1da.tar.gz |
MFH: Bug #45458 (OCI8: Numeric keys for associative arrays are not handled properly)
-rw-r--r-- | ext/oci8/oci8_interface.c | 4 | ||||
-rw-r--r-- | ext/oci8/tests/bug45458.phpt | 84 |
2 files changed, 86 insertions, 2 deletions
diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c index 7b872ed894..c7f0cceb95 100644 --- a/ext/oci8/oci8_interface.c +++ b/ext/oci8/oci8_interface.c @@ -1399,7 +1399,7 @@ PHP_FUNCTION(oci_fetch_all) if (flags & PHP_OCI_NUM) { zend_hash_next_index_insert(Z_ARRVAL_P(row), &element, sizeof(zval*), NULL); } else { /* default to ASSOC */ - zend_hash_update(Z_ARRVAL_P(row), columns[ i ]->name, columns[ i ]->name_len+1, &element, sizeof(zval*), NULL); + zend_symtable_update(Z_ARRVAL_P(row), columns[ i ]->name, columns[ i ]->name_len+1, &element, sizeof(zval*), NULL); } } @@ -1431,7 +1431,7 @@ PHP_FUNCTION(oci_fetch_all) MAKE_STD_ZVAL(tmp); array_init(tmp); - zend_hash_update(Z_ARRVAL_P(array), columns[ i ]->name, columns[ i ]->name_len+1, (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ])); + zend_symtable_update(Z_ARRVAL_P(array), columns[ i ]->name, columns[ i ]->name_len+1, (void *) &tmp, sizeof(zval*), (void **) &(outarrs[ i ])); } } diff --git a/ext/oci8/tests/bug45458.phpt b/ext/oci8/tests/bug45458.phpt new file mode 100644 index 0000000000..b1dc7720ce --- /dev/null +++ b/ext/oci8/tests/bug45458.phpt @@ -0,0 +1,84 @@ +--TEST-- +Bug #45458 (OCI8: Numeric keys for associative arrays are not handled properly) +--SKIPIF-- +<?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?> +--FILE-- +<?php + +require(dirname(__FILE__).'/connect.inc'); + +// Run Test + +echo "Test 1\n"; + +$stmt = 'select dummy "a", dummy "20" from dual'; + +$s = oci_parse($c, $stmt); +oci_execute($s); +$r = oci_fetch_all($s, $data, 0, -1, OCI_FETCHSTATEMENT_BY_ROW); +var_dump($data); +var_dump($data[0]); +var_dump($data[0]["a"]); +var_dump($data[0]["20"]); +oci_free_statement($s); + +echo "Test 2\n"; + +$s = oci_parse($c, $stmt); +oci_execute($s); +$r = oci_fetch_all($s, $data, 0, -1, OCI_ASSOC); +var_dump($data); +var_dump($data["a"]); +var_dump($data["20"]); +var_dump($data["a"][0]); +var_dump($data["20"][0]); +oci_free_statement($s); + +oci_close($c); + +?> +===DONE=== +<?php exit(0); ?> +--EXPECT-- +Test 1 +array(1) { + [0]=> + array(2) { + ["a"]=> + string(1) "X" + [20]=> + string(1) "X" + } +} +array(2) { + ["a"]=> + string(1) "X" + [20]=> + string(1) "X" +} +string(1) "X" +string(1) "X" +Test 2 +array(2) { + ["a"]=> + array(1) { + [0]=> + string(1) "X" + } + [20]=> + array(1) { + [0]=> + string(1) "X" + } +} +array(1) { + [0]=> + string(1) "X" +} +array(1) { + [0]=> + string(1) "X" +} +string(1) "X" +string(1) "X" +===DONE=== |