bind_char_2_11gR1.phpt 2.6 KB

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