1--TEST-- 2SELECT oci_bind_by_name with SQLT_AFC aka CHAR 3--SKIPIF-- 4<?php 5if (!extension_loaded('oci8')) die ("skip no oci8 extension"); 6require(__DIR__."/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=.AL32UTF8 15--FILE-- 16<?php 17 18// Output is for 32 bit client to 64bit 11.1.0.6 19 20require(__DIR__.'/connect.inc'); 21 22// Initialization 23 24$stmtarray = array( 25 "drop table bind_char_tab", 26 "create table bind_char_tab (id number, c1 char(10), c2 varchar2(10))", 27 "insert into bind_char_tab values (1, 'abc', NULL)", 28 "insert into bind_char_tab values (2, NULL, 'abc')", 29 "insert into bind_char_tab values (3, NULL, 'abc ')" 30); 31 32oci8_test_sql_execute($c, $stmtarray); 33 34// Run Test 35 36echo "*** Non-null Data Tests against CHAR***\n"; 37 38$bv1 = 'abc'; 39 40echo "Test 1.1: Type: default. Length: default\n"; 41$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); 42$r = oci_bind_by_name($s, ":bv", $bv1); 43if ($r) 44 do_e_q($s); 45 46echo "Test 1.2: Type: AFC. Length: default\n"; 47$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); 48if ($r) 49 do_e_q($s); 50 51echo "Test 1.3: Type: AFC: Length: 0\n"; 52$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); 53if ($r) 54 do_e_q($s); 55 56echo "Test 1.4: Type: AFC: Length: strlen\n"; 57$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); 58if ($r) 59 do_e_q($s); 60 61echo "Test 1.5: 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 66echo "Test 1.6: Type: AFC. Length: strlen+1\n"; 67$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); 68if ($r) 69 do_e_q($s); 70 71echo "\n\n*** NULL data tests against CHAR ***\n"; 72 73$bv1 = null; 74 75echo "Test 2.1: Type: default. Length: default\n"; 76$s = oci_parse($c, "select * from bind_char_tab where c1 = :bv"); 77$r = oci_bind_by_name($s, ":bv", $bv1); 78if ($r) 79 do_e_q($s); 80 81echo "Test 2.2: Type: AFC. Length: default\n"; 82$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); 83if ($r) 84 do_e_q($s); 85 86echo "Test 2.3: Type: AFC: Length: 0\n"; 87$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); 88if ($r) 89 do_e_q($s); 90 91echo "Test 2.4: Type: AFC: Length: strlen\n"; 92$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); 93if ($r) 94 do_e_q($s); 95 96echo "Test 2.5: Type: AFC. Length: strlen-1\n"; 97$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); 98if ($r) 99 do_e_q($s); 100 101echo "Test 2.6: Type: AFC. Length: strlen+1\n"; 102$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); 103if ($r) 104 do_e_q($s); 105 106 107echo "\n\n*** Non-null Data Tests against VARCHAR2***\n"; 108 109$bv1 = 'abc'; 110 111echo "Test 3.1: Type: default. Length: default\n"; 112$s = oci_parse($c, "select * from bind_char_tab where c2 = :bv"); 113$r = oci_bind_by_name($s, ":bv", $bv1); 114if ($r) 115 do_e_q($s); 116 117echo "Test 3.2: Type: AFC. Length: default\n"; 118$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); 119if ($r) 120 do_e_q($s); 121 122echo "Test 3.3: Type: AFC: Length: 0\n"; 123$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); 124if ($r) 125 do_e_q($s); 126 127echo "Test 3.4: Type: AFC: Length: strlen\n"; 128$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); 129if ($r) 130 do_e_q($s); 131 132echo "Test 3.5: Type: AFC. Length: strlen-1\n"; 133$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); 134if ($r) 135 do_e_q($s); 136 137echo "Test 3.6: Type: AFC. Length: strlen+1\n"; 138$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); 139if ($r) 140 do_e_q($s); 141 142 143echo "\n\n*** NULL data tests against VARCHAR2 ***\n"; 144 145$bv1 = null; 146 147echo "Test 4.1: Type: default. Length: default\n"; 148$s = oci_parse($c, "select * from bind_char_tab where c2 = :bv"); 149$r = oci_bind_by_name($s, ":bv", $bv1); 150if ($r) 151 do_e_q($s); 152 153echo "Test 4.2: Type: AFC. Length: default\n"; 154$r = oci_bind_by_name($s, ":bv", $bv1, -1, SQLT_AFC); 155if ($r) 156 do_e_q($s); 157 158echo "Test 4.3: Type: AFC: Length: 0\n"; 159$r = oci_bind_by_name($s, ":bv", $bv1, 0, SQLT_AFC); 160if ($r) 161 do_e_q($s); 162 163echo "Test 4.4: Type: AFC: Length: strlen\n"; 164$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1), SQLT_AFC); 165if ($r) 166 do_e_q($s); 167 168echo "Test 4.5: Type: AFC. Length: strlen-1\n"; 169$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)-1, SQLT_AFC); 170if ($r) 171 do_e_q($s); 172 173echo "Test 4.6: Type: AFC. Length: strlen+1\n"; 174$r = oci_bind_by_name($s, ":bv", $bv1, strlen($bv1)+1, SQLT_AFC); 175if ($r) 176 do_e_q($s); 177 178 179 180function do_e_q($s) 181{ 182 echo " Querying:\n"; 183 184 $r = @oci_execute($s); 185 if (!$r) { 186 $m = oci_error($s); 187 echo " Oci_execute error ORA-".$m['code']." Exiting Query\n"; 188 return; 189 } 190 while ($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) { 191 foreach ($row as $item) { 192 echo " :" . $item . ":\n"; 193 } 194 } 195} 196 197// Cleanup 198$stmtarray = array( 199 "drop table bind_char_tab" 200); 201 202oci8_test_sql_execute($c, $stmtarray); 203 204echo "Done\n"; 205 206?> 207--EXPECT-- 208*** Non-null Data Tests against CHAR*** 209Test 1.1: Type: default. Length: default 210 Querying: 211Test 1.2: Type: AFC. Length: default 212 Querying: 213 :1: 214 :abc : 215 :: 216Test 1.3: Type: AFC: Length: 0 217 Querying: 218 :1: 219 :abc : 220 :: 221Test 1.4: Type: AFC: Length: strlen 222 Querying: 223 :1: 224 :abc : 225 :: 226Test 1.5: Type: AFC. Length: strlen-1 227 Querying: 228Test 1.6: Type: AFC. Length: strlen+1 229 Querying: 230 :1: 231 :abc : 232 :: 233 234 235*** NULL data tests against CHAR *** 236Test 2.1: Type: default. Length: default 237 Querying: 238Test 2.2: Type: AFC. Length: default 239 Querying: 240Test 2.3: Type: AFC: Length: 0 241 Querying: 242Test 2.4: Type: AFC: Length: strlen 243 Querying: 244Test 2.5: Type: AFC. Length: strlen-1 245 Querying: 246Test 2.6: Type: AFC. Length: strlen+1 247 Querying: 248 249 250*** Non-null Data Tests against VARCHAR2*** 251Test 3.1: Type: default. Length: default 252 Querying: 253 :2: 254 :: 255 :abc: 256Test 3.2: Type: AFC. Length: default 257 Querying: 258 :2: 259 :: 260 :abc: 261Test 3.3: Type: AFC: Length: 0 262 Querying: 263 :2: 264 :: 265 :abc: 266Test 3.4: Type: AFC: Length: strlen 267 Querying: 268 :2: 269 :: 270 :abc: 271Test 3.5: Type: AFC. Length: strlen-1 272 Querying: 273Test 3.6: Type: AFC. Length: strlen+1 274 Querying: 275 :2: 276 :: 277 :abc: 278 279 280*** NULL data tests against VARCHAR2 *** 281Test 4.1: Type: default. Length: default 282 Querying: 283Test 4.2: Type: AFC. Length: default 284 Querying: 285Test 4.3: Type: AFC: Length: 0 286 Querying: 287Test 4.4: Type: AFC: Length: strlen 288 Querying: 289Test 4.5: Type: AFC. Length: strlen-1 290 Querying: 291Test 4.6: Type: AFC. Length: strlen+1 292 Querying: 293Done 294