bug37581.phpt 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --TEST--
  2. Bug #37581 (oci_bind_array_by_name clobbers input array when using SQLT_AFC, AVC)
  3. --EXTENSIONS--
  4. oci8
  5. --SKIPIF--
  6. <?php
  7. $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
  8. require(__DIR__.'/skipif.inc');
  9. ?>
  10. --FILE--
  11. <?php
  12. require __DIR__."/connect.inc";
  13. $p1 = "create or replace package BUG37581_PKG as
  14. type str_array is table of char(2) index by binary_integer;
  15. procedure array_bind(in_str in str_array, out_str out string);
  16. end BUG37581_PKG;";
  17. $p2 = "create or replace package body BUG37581_PKG as
  18. procedure array_bind(in_str in str_array, out_str out string) is
  19. begin
  20. for i in 1 .. in_str.count loop
  21. out_str := in_str(i);
  22. end loop;
  23. end array_bind;
  24. end BUG37581_PKG;";
  25. $s1 = oci_parse($c, $p1);
  26. $s2 = oci_parse($c, $p2);
  27. oci_execute($s1);
  28. oci_execute($s2);
  29. $stmt = oci_parse($c,'begin bug37581_pkg.array_bind(:in_arr, :out_str); end;');
  30. $strings = array('A','B','C','D','E');
  31. oci_bind_array_by_name($stmt,':in_arr',$strings,5,1,SQLT_AFC);
  32. oci_bind_by_name($stmt,':out_str',$result,10);
  33. oci_execute($stmt);
  34. var_dump($strings);
  35. oci_execute($stmt);
  36. var_dump($strings);
  37. echo "Done\n";
  38. ?>
  39. --EXPECT--
  40. array(5) {
  41. [0]=>
  42. string(1) "A"
  43. [1]=>
  44. string(1) "B"
  45. [2]=>
  46. string(1) "C"
  47. [3]=>
  48. string(1) "D"
  49. [4]=>
  50. string(1) "E"
  51. }
  52. array(5) {
  53. [0]=>
  54. string(1) "A"
  55. [1]=>
  56. string(1) "B"
  57. [2]=>
  58. string(1) "C"
  59. [3]=>
  60. string(1) "D"
  61. [4]=>
  62. string(1) "E"
  63. }
  64. Done