sixd Tue Mar 4 21:45:55 2008 UTC Added files: /php-src/ext/oci8/tests bind_char_1.phpt bind_char_2.phpt bind_char_3.phpt bind_char_4.phpt bug41069.phpt
Modified files: /php-src/ext/oci8 oci8_statement.c Log: Fix bug #41069 (db link crash). Also allow SQLT_AFC (aka CHAR datatype) in oci_bind_by_name
http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/oci8_statement.c?r1=1.54&r2=1.55&diff_format=u Index: php-src/ext/oci8/oci8_statement.c diff -u php-src/ext/oci8/oci8_statement.c:1.54 php-src/ext/oci8/oci8_statement.c:1.55 --- php-src/ext/oci8/oci8_statement.c:1.54 Mon Feb 25 23:49:51 2008 +++ php-src/ext/oci8/oci8_statement.c Tue Mar 4 21:45:55 2008 @@ -25,7 +25,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: oci8_statement.c,v 1.54 2008/02/25 23:49:51 sixd Exp $ */ +/* $Id: oci8_statement.c,v 1.55 2008/03/04 21:45:55 sixd Exp $ */ #ifdef HAVE_CONFIG_H @@ -127,22 +127,13 @@ Set prefetch buffer size for the statement (we're assuming that one row is ~1K sized) */ int php_oci_statement_set_prefetch(php_oci_statement *statement, long size TSRMLS_DC) { - ub4 prefetch = size * 1024; + ub4 prefetch = size; if (size < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of rows has to be greater than or equal to 1"); return 1; } - PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrSet, (statement->stmt, OCI_HTYPE_STMT, &prefetch, 0, OCI_ATTR_PREFETCH_MEMORY, statement->err)); - - if (statement->errcode != OCI_SUCCESS) { - php_oci_error(statement->err, statement->errcode TSRMLS_CC); - PHP_OCI_HANDLE_ERROR(statement->connection, statement->errcode); - return 1; - } - - prefetch = size; PHP_OCI_CALL_RETURN(statement->errcode, OCIAttrSet, (statement->stmt, OCI_HTYPE_STMT, &prefetch, 0, OCI_ATTR_PREFETCH_ROWS, statement->err)); if (statement->errcode != OCI_SUCCESS) { @@ -1010,8 +1001,8 @@ case SQLT_LBI: case SQLT_BIN: case SQLT_LNG: - case SQLT_CHR: - /* this is the default case when type was not specified */ + case SQLT_AFC: + case SQLT_CHR: /* SQLT_CHAR is the default value when type was not specified */ if (Z_TYPE_P(var) != IS_NULL) { convert_to_text(var); } http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_1.phpt?view=markup&rev=1.1 Index: php-src/ext/oci8/tests/bind_char_1.phpt +++ php-src/ext/oci8/tests/bind_char_1.phpt --TEST-- SELECT oci_bind_by_name with SQLT_AFC aka CHAR --SKIPIF-- <?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?> --FILE-- <?php require(dirname(__FILE__).'/connect.inc'); // Initialization $stmtarray = array( "drop table bind_char_tab", "create table bind_char_tab (id number, c1 char(10), c2 varchar2(10))", "insert into bind_char_tab values (1, 'abc', NULL)", "insert into bind_char_tab values (2, NULL, 'abc')", "insert into bind_char_tab values (3, NULL, 'abc ')" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); @oci_execute($s); } // Run Test echo "*** Non-null Data Tests against CHAR***\n"; $bv1 = 'abc'; echo "Test 1.1: Type: default. Length: default\n"; $s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); $r = oci_bind_by_name($s, ":bv", $bv1); if ($r) do_e_q($s); echo "Test 1.2: Type: AFC. Length: default\n"; $r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.3: Type: AFC: Length: 0\n"; $r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.4: Type: AFC: Length: strlen\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.5: Type: AFC. Length: strlen-1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.6: Type: AFC. Length: strlen+1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); if ($r) do_e_q($s); echo "\n\n*** NULL data tests against CHAR ***\n"; $bv1 = null; echo "Test 2.1: Type: default. Length: default\n"; $s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); $r = oci_bind_by_name($s, ":bv", $bv1); if ($r) do_e_q($s); echo "Test 2.2: Type: AFC. Length: default\n"; $r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 2.3: Type: AFC: Length: 0\n"; $r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); if ($r) do_e_q($s); echo "Test 2.4: Type: AFC: Length: strlen\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); if ($r) do_e_q($s); echo "Test 2.5: Type: AFC. Length: strlen-1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 2.6: Type: AFC. Length: strlen+1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); if ($r) do_e_q($s); echo "\n\n*** Non-null Data Tests against VARCHAR2***\n"; $bv1 = 'abc'; echo "Test 3.1: Type: default. Length: default\n"; $s = oci_parse($c, "select * from bind_char_tab where c2 = :bv"); $r = oci_bind_by_name($s, ":bv", $bv1); if ($r) do_e_q($s); echo "Test 3.2: Type: AFC. Length: default\n"; $r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 3.3: Type: AFC: Length: 0\n"; $r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); if ($r) do_e_q($s); echo "Test 3.4: Type: AFC: Length: strlen\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); if ($r) do_e_q($s); echo "Test 3.5: Type: AFC. Length: strlen-1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 3.6: Type: AFC. Length: strlen+1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); if ($r) do_e_q($s); echo "\n\n*** NULL data tests against VARCHAR2 ***\n"; $bv1 = null; echo "Test 4.1: Type: default. Length: default\n"; $s = oci_parse($c, "select * from bind_char_tab where c2 = :bv"); $r = oci_bind_by_name($s, ":bv", $bv1); if ($r) do_e_q($s); echo "Test 4.2: Type: AFC. Length: default\n"; $r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 4.3: Type: AFC: Length: 0\n"; $r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); if ($r) do_e_q($s); echo "Test 4.4: Type: AFC: Length: strlen\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); if ($r) do_e_q($s); echo "Test 4.5: Type: AFC. Length: strlen-1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 4.6: Type: AFC. Length: strlen+1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); if ($r) do_e_q($s); function do_e_q($s) { echo " Querying:\n"; $r = @oci_execute($s); if (!$r) { $m = oci_error($s); echo " Oci_execute error ORA-".$m['code']." Exiting Query\n"; return; } while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) { foreach ($row as $item) { echo " :" . $item . ":\n"; } } } // Cleanup $stmtarray = array( "drop table bind_char_tab" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); oci_execute($s); } oci_close($c); echo "Done\n"; ?> --EXPECT-- *** Non-null Data Tests against CHAR*** Test 1.1: Type: default. Length: default Querying: Test 1.2: Type: AFC. Length: default Querying: :1: :abc : :: Test 1.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.4: Type: AFC: Length: strlen Querying: :1: :abc : :: Test 1.5: Type: AFC. Length: strlen-1 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.6: Type: AFC. Length: strlen+1 Querying: :1: :abc : :: *** NULL data tests against CHAR *** Test 2.1: Type: default. Length: default Querying: Test 2.2: Type: AFC. Length: default Querying: Test 2.3: Type: AFC: Length: 0 Querying: Test 2.4: Type: AFC: Length: strlen Querying: Test 2.5: Type: AFC. Length: strlen-1 Querying: Test 2.6: Type: AFC. Length: strlen+1 Querying: *** Non-null Data Tests against VARCHAR2*** Test 3.1: Type: default. Length: default Querying: :2: :: :abc: Test 3.2: Type: AFC. Length: default Querying: :2: :: :abc: Test 3.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 3.4: Type: AFC: Length: strlen Querying: :2: :: :abc: Test 3.5: Type: AFC. Length: strlen-1 Querying: Oci_execute error ORA-1460 Exiting Query Test 3.6: Type: AFC. Length: strlen+1 Querying: :2: :: :abc: *** NULL data tests against VARCHAR2 *** Test 4.1: Type: default. Length: default Querying: Test 4.2: Type: AFC. Length: default Querying: Test 4.3: Type: AFC: Length: 0 Querying: Test 4.4: Type: AFC: Length: strlen Querying: Test 4.5: Type: AFC. Length: strlen-1 Querying: Test 4.6: Type: AFC. Length: strlen+1 Querying: Done --UEXPECT-- *** Non-null Data Tests against CHAR*** Test 1.1: Type: default. Length: default Querying: Test 1.2: Type: AFC. Length: default Querying: :1: :abc : :: Test 1.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.4: Type: AFC: Length: strlen Querying: :1: :abc : :: Test 1.5: Type: AFC. Length: strlen-1 Querying: :1: :abc : :: Test 1.6: Type: AFC. Length: strlen+1 Querying: :1: :abc : :: *** NULL data tests against CHAR *** Test 2.1: Type: default. Length: default Querying: Test 2.2: Type: AFC. Length: default Querying: Test 2.3: Type: AFC: Length: 0 Querying: Test 2.4: Type: AFC: Length: strlen Querying: Test 2.5: Type: AFC. Length: strlen-1 Querying: Test 2.6: Type: AFC. Length: strlen+1 Querying: *** Non-null Data Tests against VARCHAR2*** Test 3.1: Type: default. Length: default Querying: :2: :: :abc: Test 3.2: Type: AFC. Length: default Querying: :2: :: :abc: Test 3.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 3.4: Type: AFC: Length: strlen Querying: :2: :: :abc: Test 3.5: Type: AFC. Length: strlen-1 Querying: :2: :: :abc: Test 3.6: Type: AFC. Length: strlen+1 Querying: :2: :: :abc: *** NULL data tests against VARCHAR2 *** Test 4.1: Type: default. Length: default Querying: Test 4.2: Type: AFC. Length: default Querying: Test 4.3: Type: AFC: Length: 0 Querying: Test 4.4: Type: AFC: Length: strlen Querying: Test 4.5: Type: AFC. Length: strlen-1 Querying: Test 4.6: Type: AFC. Length: strlen+1 Querying: Done http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_2.phpt?view=markup&rev=1.1 Index: php-src/ext/oci8/tests/bind_char_2.phpt +++ php-src/ext/oci8/tests/bind_char_2.phpt --TEST-- SELECT oci_bind_by_name with SQLT_AFC aka CHAR and dates --SKIPIF-- <?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?> --FILE-- <?php require(dirname(__FILE__).'/connect.inc'); // Initialization $stmtarray = array( "alter session set nls_date_format='YYYY-MM-DD'", "drop table bind_char_tab", "create table bind_char_tab (id number, c1 date)", "insert into bind_char_tab values (1, '2008-04-20')", ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); @oci_execute($s); } // Run Test $bv1 = '2008-04-20'; echo "Test 1.1: Type: default. Length: default\n"; $s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); $r = oci_bind_by_name($s, ":bv", $bv1); if ($r) do_e_q($s); echo "Test 1.2: Type: AFC. Length: default\n"; $r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.3: Type: AFC: Length: 0\n"; $r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.4: Type: AFC: Length: strlen\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.5: Type: AFC. Length: strlen-1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); if ($r) do_e_q($s); echo "Test 1.6: Type: AFC. Length: strlen+1\n"; $r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); if ($r) do_e_q($s); function do_e_q($s) { echo " Querying:\n"; $r = @oci_execute($s); if (!$r) { $m = oci_error($s); echo " Oci_execute error ORA-".$m['code']." Exiting Query\n"; return; } while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) { foreach ($row as $item) { echo " :" . $item . ":\n"; } } } // Cleanup $stmtarray = array( "drop table bind_char_tab" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); oci_execute($s); } oci_close($c); echo "Done\n"; ?> --EXPECT-- Test 1.1: Type: default. Length: default Querying: :1: :2008-04-20: Test 1.2: Type: AFC. Length: default Querying: :1: :2008-04-20: Test 1.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.4: Type: AFC: Length: strlen Querying: :1: :2008-04-20: Test 1.5: Type: AFC. Length: strlen-1 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.6: Type: AFC. Length: strlen+1 Querying: :1: :2008-04-20: Done --UEXPECT-- Test 1.1: Type: default. Length: default Querying: :1: :2008-04-20: Test 1.2: Type: AFC. Length: default Querying: :1: :2008-04-20: Test 1.3: Type: AFC: Length: 0 Querying: Oci_execute error ORA-1460 Exiting Query Test 1.4: Type: AFC: Length: strlen Querying: :1: :2008-04-20: Test 1.5: Type: AFC. Length: strlen-1 Querying: :1: :2008-04-20: Test 1.6: Type: AFC. Length: strlen+1 Querying: :1: :2008-04-20: Done http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_3.phpt?view=markup&rev=1.1 Index: php-src/ext/oci8/tests/bind_char_3.phpt +++ php-src/ext/oci8/tests/bind_char_3.phpt --TEST-- PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to CHAR parameter --SKIPIF-- <?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?> --FILE-- <?php require(dirname(__FILE__).'/connect.inc'); // Initialization $stmtarray = array( "create or replace function bind_char_3_fn(p1 char) return char as begin return p1; end;", ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); @oci_execute($s); } // Run Test echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n"; $s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;"); $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "\n\nTests with ''\n\n"; echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "\n\nTests with NULL\n"; echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); function do_e($s) { echo " Executing:\n"; $r = @oci_execute($s); if (!$r) { $m = oci_error($s); echo " Oci_execute error ORA-".$m['code']."\n"; return; } } // Cleanup //require(dirname(__FILE__).'/drop_table.inc'); $stmtarray = array( "drop function bind_char_3_fn" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); oci_execute($s); } oci_close($c); echo "Done\n"; ?> --EXPECTF-- Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default Executing: Oci_execute error ORA-6502 string(3) "abc" NULL Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: string(3) "abc" string(3) "abc" Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: string(3) "abc" string(3) "abc" Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(3) "abc" string(10) "abc " Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC Executing: string(3) "abc" string(3) "abc" Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC Executing: Oci_execute error ORA-6502 string(3) "abc" string(3) "abc" Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC Executing: string(3) "abc" string(4) "abc " Tests with '' Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(0) "" NULL Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: string(0) "" NULL Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: string(0) "" NULL Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(0) "" NULL Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: string(0) "" NULL Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC Executing: string(0) "" NULL Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: string(0) "" NULL Tests with NULL Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: NULL NULL Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: NULL NULL Done --UEXPECT-- Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default Executing: Oci_execute error ORA-6502 unicode(3) "abc" NULL Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: unicode(3) "abc" unicode(3) "abc" Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: unicode(3) "abc" unicode(3) "abc" Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(3) "abc" unicode(20) "abc " Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC Executing: unicode(3) "abc" unicode(6) "abc " Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC Executing: unicode(3) "abc" unicode(4) "abc " Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC Executing: unicode(3) "abc" unicode(8) "abc " Tests with '' Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(0) "" NULL Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: unicode(0) "" NULL Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: unicode(0) "" NULL Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(0) "" NULL Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: unicode(0) "" NULL Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC Executing: unicode(0) "" NULL Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: unicode(0) "" NULL Tests with NULL Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: NULL NULL Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: NULL NULL Done http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bind_char_4.phpt?view=markup&rev=1.1 Index: php-src/ext/oci8/tests/bind_char_4.phpt +++ php-src/ext/oci8/tests/bind_char_4.phpt --TEST-- PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to VARCHAR2 parameter --SKIPIF-- <?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); ?> --FILE-- <?php // Same test as bind_char_3 but the PL/SQL function uses VARCHAR2 instead of CHAR require(dirname(__FILE__).'/connect.inc'); // Initialization $stmtarray = array( "create or replace function bind_char_3_fn(p1 varchar2) return varchar2 as begin return p1; end;", ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); @oci_execute($s); } // Run Test echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n"; $s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;"); $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n"; $bv1 = 'abc'; $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "\n\nTests with ''\n\n"; echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n"; $bv1 = ''; $r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "\n\nTests with NULL\n"; echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n"; $bv1 = null; $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC); if ($r) do_e($s); var_dump($bv1, $bv2); function do_e($s) { echo " Executing:\n"; $r = @oci_execute($s); if (!$r) { $m = oci_error($s); echo " Oci_execute error ORA-".$m['code']."\n"; return; } } // Cleanup //require(dirname(__FILE__).'/drop_table.inc'); $stmtarray = array( "drop function bind_char_3_fn" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); oci_execute($s); } oci_close($c); echo "Done\n"; ?> --EXPECTF-- Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default Executing: Oci_execute error ORA-6502 string(3) "abc" NULL Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: string(3) "abc" string(3) "abc" Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: string(3) "abc" string(3) "abc" Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(3) "abc" string(10) "abc " Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC Executing: string(3) "abc" string(3) "abc" Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC Executing: Oci_execute error ORA-6502 string(3) "abc" string(3) "abc" Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC Executing: string(3) "abc" string(4) "abc " Tests with '' Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(0) "" NULL Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: string(0) "" NULL Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: string(0) "" NULL Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: string(0) "" NULL Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: string(0) "" NULL Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC Executing: string(0) "" NULL Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: string(0) "" NULL Tests with NULL Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: NULL NULL Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: NULL NULL Done --UEXPECT-- Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default Executing: Oci_execute error ORA-6502 unicode(3) "abc" NULL Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: unicode(3) "abc" unicode(3) "abc" Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: unicode(3) "abc" unicode(3) "abc" Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(3) "abc" unicode(20) "abc " Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC Executing: unicode(3) "abc" unicode(6) "abc " Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC Executing: unicode(3) "abc" unicode(4) "abc " Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC Executing: unicode(3) "abc" unicode(8) "abc " Tests with '' Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(0) "" NULL Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: unicode(0) "" NULL Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: unicode(0) "" NULL Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: unicode(0) "" NULL Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: unicode(0) "" NULL Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC Executing: unicode(0) "" NULL Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: unicode(0) "" NULL Tests with NULL Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default Executing: NULL NULL Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC Executing: NULL NULL Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC Executing: NULL NULL Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC Executing: NULL NULL Done http://cvs.php.net/viewvc.cgi/php-src/ext/oci8/tests/bug41069.phpt?view=markup&rev=1.1 Index: php-src/ext/oci8/tests/bug41069.phpt +++ php-src/ext/oci8/tests/bug41069.phpt --TEST-- Bug #41069 (Oracle crash with certain data over a DB-link when prefetch memory limit used - Oracle bug 6039623) --SKIPIF-- <?php if (!extension_loaded('oci8')) die ("skip no oci8 extension"); require(dirname(__FILE__).'/details.inc'); if (empty($dbase)) die ("skip requires network connection alias for DB link loopback"); if ($test_drcp) die("skip DRCP does not support shared database links"); ?> --INI-- oci8.default_prefetch=5 --FILE-- <?php require(dirname(__FILE__).'/connect.inc'); // Initialization $stmtarray = array( "alter session set nls_date_format = 'MM/DD/YYYY'", "drop database link bug41069_dblink", "drop table bug41069_tab", "create shared database link bug41069_dblink authenticated by $user identified by $password using '$dbase'", "create table bug41069_tab ( c1 number(20), c2 varchar2(60 byte), c3 varchar2(1000 byte), c4 varchar2(255 byte), c5 varchar2(2 byte), c6 varchar2(1 byte), c7 varchar2(255 byte), c8 varchar2(50 byte), c9 date, c10 date, c12 number(20), c13 varchar2(20 byte), c15 varchar2(50 byte) )", "insert into bug41069_tab (c1, c2, c5, c6, c9, c10, c12, c15) values (111, 'aaaaaaa', 'b', 'c', '01/17/2008', '01/07/2017', 2222, 'zzzzzzzzzz')", "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c13, c15) values (112, 'aaaaaaa', 'bbbbbbbb', 'ccccccc', 'd', 'e', 'rrrrrrr', '04/16/2007', '04/16/2007', 2223, 'xxxxxxxx', 'zzzzzzzz')", "insert into bug41069_tab (c1, c2, c3, c4, c5, c6, c7, c9, c10, c12, c15) values (113, 'aaaaaaa', 'bbbbbbbbbb', 'cccccc', 'e', 'f', 'dddd', '12/04/2006', '12/04/2006', 2224, 'zzzzzzz')" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); @oci_execute($s); } // Run Tests echo "Test 1: non-DB link case that always worked\n"; $stid = oci_parse($c, 'select * from bug41069_tab order by c1'); oci_execute($stid, OCI_DEFAULT); oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW); var_dump($results); echo "Test 2: Should not crash\n"; $stid = oci_parse($c, 'select * from [EMAIL PROTECTED] order by c1'); oci_execute($stid, OCI_DEFAULT); oci_fetch_all($stid, $results, 0, -1, OCI_ASSOC+OCI_FETCHSTATEMENT_BY_ROW); var_dump($results); // Cleanup $c = oci_new_connect($user, $password, $dbase); $stmtarray = array( "drop database link bug41069_dblink", "drop table bug41069_tab" ); foreach ($stmtarray as $stmt) { $s = oci_parse($c, $stmt); oci_execute($s); } oci_close($c); echo "Done\n"; ?> --EXPECT-- Test 1: non-DB link case that always worked array(3) { [0]=> array(13) { ["C1"]=> string(3) "111" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> NULL ["C4"]=> NULL ["C5"]=> string(1) "b" ["C6"]=> string(1) "c" ["C7"]=> NULL ["C8"]=> NULL ["C9"]=> string(10) "01/17/2008" ["C10"]=> string(10) "01/07/2017" ["C12"]=> string(4) "2222" ["C13"]=> NULL ["C15"]=> string(10) "zzzzzzzzzz" } [1]=> array(13) { ["C1"]=> string(3) "112" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> string(8) "bbbbbbbb" ["C4"]=> string(7) "ccccccc" ["C5"]=> string(1) "d" ["C6"]=> string(1) "e" ["C7"]=> string(7) "rrrrrrr" ["C8"]=> NULL ["C9"]=> string(10) "04/16/2007" ["C10"]=> string(10) "04/16/2007" ["C12"]=> string(4) "2223" ["C13"]=> string(8) "xxxxxxxx" ["C15"]=> string(8) "zzzzzzzz" } [2]=> array(13) { ["C1"]=> string(3) "113" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> string(10) "bbbbbbbbbb" ["C4"]=> string(6) "cccccc" ["C5"]=> string(1) "e" ["C6"]=> string(1) "f" ["C7"]=> string(4) "dddd" ["C8"]=> NULL ["C9"]=> string(10) "12/04/2006" ["C10"]=> string(10) "12/04/2006" ["C12"]=> string(4) "2224" ["C13"]=> NULL ["C15"]=> string(7) "zzzzzzz" } } Test 2: Should not crash array(3) { [0]=> array(13) { ["C1"]=> string(3) "111" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> NULL ["C4"]=> NULL ["C5"]=> string(1) "b" ["C6"]=> string(1) "c" ["C7"]=> NULL ["C8"]=> NULL ["C9"]=> string(10) "01/17/2008" ["C10"]=> string(10) "01/07/2017" ["C12"]=> string(4) "2222" ["C13"]=> NULL ["C15"]=> string(10) "zzzzzzzzzz" } [1]=> array(13) { ["C1"]=> string(3) "112" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> string(8) "bbbbbbbb" ["C4"]=> string(7) "ccccccc" ["C5"]=> string(1) "d" ["C6"]=> string(1) "e" ["C7"]=> string(7) "rrrrrrr" ["C8"]=> NULL ["C9"]=> string(10) "04/16/2007" ["C10"]=> string(10) "04/16/2007" ["C12"]=> string(4) "2223" ["C13"]=> string(8) "xxxxxxxx" ["C15"]=> string(8) "zzzzzzzz" } [2]=> array(13) { ["C1"]=> string(3) "113" ["C2"]=> string(7) "aaaaaaa" ["C3"]=> string(10) "bbbbbbbbbb" ["C4"]=> string(6) "cccccc" ["C5"]=> string(1) "e" ["C6"]=> string(1) "f" ["C7"]=> string(4) "dddd" ["C8"]=> NULL ["C9"]=> string(10) "12/04/2006" ["C10"]=> string(10) "12/04/2006" ["C12"]=> string(4) "2224" ["C13"]=> NULL ["C15"]=> string(7) "zzzzzzz" } } Done --UEXPECT-- Test 1: non-DB link case that always worked array(3) { [0]=> array(13) { [u"C1"]=> unicode(3) "111" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> NULL [u"C4"]=> NULL [u"C5"]=> unicode(1) "b" [u"C6"]=> unicode(1) "c" [u"C7"]=> NULL [u"C8"]=> NULL [u"C9"]=> unicode(10) "01/17/2008" [u"C10"]=> unicode(10) "01/07/2017" [u"C12"]=> unicode(4) "2222" [u"C13"]=> NULL [u"C15"]=> unicode(10) "zzzzzzzzzz" } [1]=> array(13) { [u"C1"]=> unicode(3) "112" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> unicode(8) "bbbbbbbb" [u"C4"]=> unicode(7) "ccccccc" [u"C5"]=> unicode(1) "d" [u"C6"]=> unicode(1) "e" [u"C7"]=> unicode(7) "rrrrrrr" [u"C8"]=> NULL [u"C9"]=> unicode(10) "04/16/2007" [u"C10"]=> unicode(10) "04/16/2007" [u"C12"]=> unicode(4) "2223" [u"C13"]=> unicode(8) "xxxxxxxx" [u"C15"]=> unicode(8) "zzzzzzzz" } [2]=> array(13) { [u"C1"]=> unicode(3) "113" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> unicode(10) "bbbbbbbbbb" [u"C4"]=> unicode(6) "cccccc" [u"C5"]=> unicode(1) "e" [u"C6"]=> unicode(1) "f" [u"C7"]=> unicode(4) "dddd" [u"C8"]=> NULL [u"C9"]=> unicode(10) "12/04/2006" [u"C10"]=> unicode(10) "12/04/2006" [u"C12"]=> unicode(4) "2224" [u"C13"]=> NULL [u"C15"]=> unicode(7) "zzzzzzz" } } Test 2: Should not crash array(3) { [0]=> array(13) { [u"C1"]=> unicode(3) "111" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> NULL [u"C4"]=> NULL [u"C5"]=> unicode(1) "b" [u"C6"]=> unicode(1) "c" [u"C7"]=> NULL [u"C8"]=> NULL [u"C9"]=> unicode(10) "01/17/2008" [u"C10"]=> unicode(10) "01/07/2017" [u"C12"]=> unicode(4) "2222" [u"C13"]=> NULL [u"C15"]=> unicode(10) "zzzzzzzzzz" } [1]=> array(13) { [u"C1"]=> unicode(3) "112" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> unicode(8) "bbbbbbbb" [u"C4"]=> unicode(7) "ccccccc" [u"C5"]=> unicode(1) "d" [u"C6"]=> unicode(1) "e" [u"C7"]=> unicode(7) "rrrrrrr" [u"C8"]=> NULL [u"C9"]=> unicode(10) "04/16/2007" [u"C10"]=> unicode(10) "04/16/2007" [u"C12"]=> unicode(4) "2223" [u"C13"]=> unicode(8) "xxxxxxxx" [u"C15"]=> unicode(8) "zzzzzzzz" } [2]=> array(13) { [u"C1"]=> unicode(3) "113" [u"C2"]=> unicode(7) "aaaaaaa" [u"C3"]=> unicode(10) "bbbbbbbbbb" [u"C4"]=> unicode(6) "cccccc" [u"C5"]=> unicode(1) "e" [u"C6"]=> unicode(1) "f" [u"C7"]=> unicode(4) "dddd" [u"C8"]=> NULL [u"C9"]=> unicode(10) "12/04/2006" [u"C10"]=> unicode(10) "12/04/2006" [u"C12"]=> unicode(4) "2224" [u"C13"]=> NULL [u"C15"]=> unicode(7) "zzzzzzz" } } Done
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php