1--TEST-- 2SELECT oci_bind_by_name with SQLT_AFC aka CHAR and dates 3--SKIPIF-- 4<?php 5if (!extension_loaded('oci8')) die ("skip no oci8 extension"); 6require(dirname(__FILE__)."/connect.inc"); 7// The bind buffer size edge cases seem to change each DB version. 8preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches); 9if (!(isset($matches[0]) && $matches[1] < 12)) { 10 die("skip expected output only valid when using pre-Oracle 12c database"); 11} 12?> 13--ENV-- 14NLS_LANG= 15--FILE-- 16<?php 17 18require(dirname(__FILE__).'/connect.inc'); 19 20// Initialization 21 22$stmtarray = array( 23 "alter session set nls_date_format='YYYY-MM-DD'", 24 "drop table bind_char_tab", 25 "create table bind_char_tab (id number, c1 date)", 26 "insert into bind_char_tab values (1, '2008-04-20')", 27); 28 29oci8_test_sql_execute($c, $stmtarray); 30 31// Run Test 32 33$bv1 = '2008-04-20'; 34 35echo "Test 1.1: Type: default. Length: default\n"; 36$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); 37$r = oci_bind_by_name($s, ":bv", $bv1); 38if ($r) 39 do_e_q($s); 40 41echo "Test 1.2: Type: AFC. Length: default\n"; 42$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); 43if ($r) 44 do_e_q($s); 45 46echo "Test 1.3: Type: AFC: Length: 0\n"; 47$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); 48if ($r) 49 do_e_q($s); 50 51echo "Test 1.4: Type: AFC: Length: strlen\n"; 52$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); 53if ($r) 54 do_e_q($s); 55 56echo "Test 1.5: Type: AFC. Length: strlen-1\n"; 57$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); 58if ($r) 59 do_e_q($s); 60 61echo "Test 1.6: Type: AFC. Length: strlen+1\n"; 62$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); 63if ($r) 64 do_e_q($s); 65 66 67function do_e_q($s) 68{ 69 echo " Querying:\n"; 70 71 $r = @oci_execute($s); 72 if (!$r) { 73 $m = oci_error($s); 74 echo " Oci_execute error ORA-".$m['code']." Exiting Query\n"; 75 return; 76 } 77 while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) { 78 foreach ($row as $item) { 79 echo " :" . $item . ":\n"; 80 } 81 } 82} 83 84// Cleanup 85$stmtarray = array( 86 "drop table bind_char_tab" 87); 88 89oci8_test_sql_execute($c, $stmtarray); 90 91echo "Done\n"; 92 93?> 94--EXPECT-- 95Test 1.1: Type: default. Length: default 96 Querying: 97 :1: 98 :2008-04-20: 99Test 1.2: Type: AFC. Length: default 100 Querying: 101 :1: 102 :2008-04-20: 103Test 1.3: Type: AFC: Length: 0 104 Querying: 105 Oci_execute error ORA-1460 Exiting Query 106Test 1.4: Type: AFC: Length: strlen 107 Querying: 108 :1: 109 :2008-04-20: 110Test 1.5: Type: AFC. Length: strlen-1 111 Querying: 112 Oci_execute error ORA-1460 Exiting Query 113Test 1.6: Type: AFC. Length: strlen+1 114 Querying: 115 :1: 116 :2008-04-20: 117Done 118