bug77051.phpt 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. --TEST--
  2. Bug #77051 SQLite3::bindParam memory bug when missing ::reset call
  3. --EXTENSIONS--
  4. sqlite3
  5. --FILE--
  6. <?php
  7. $db = new SQLite3(':memory:');
  8. $db->enableExceptions(true);
  9. $stmt = $db->prepare('SELECT :a, :b, ?;');
  10. $a = 42;
  11. $stmt->bindParam(':a', $a, SQLITE3_INTEGER);
  12. $stmt->bindValue(':b', 'php');
  13. $stmt->bindValue(':b', 'PHP');
  14. $stmt->bindValue(3, 424242);
  15. echo "Execute statement\n";
  16. var_dump($res = $stmt->execute());
  17. echo "Statement result\n";
  18. var_dump($res->fetchArray(SQLITE3_NUM));
  19. echo "Change binded param to wrong type\n";
  20. $a = 'TEST';
  21. echo "Execute statement\n";
  22. var_dump($res = $stmt->execute());
  23. echo "Statement result\n";
  24. var_dump($res->fetchArray(SQLITE3_NUM));
  25. echo "Change binded values\n";
  26. $a = 5252552;
  27. $stmt->bindValue(':b', 'TEST');
  28. $stmt->bindValue(3, '!!!');
  29. echo "Execute statement\n";
  30. var_dump($res = $stmt->execute());
  31. echo "Statement result\n";
  32. var_dump($res->fetchArray(SQLITE3_NUM));
  33. ?>
  34. --EXPECT--
  35. Execute statement
  36. object(SQLite3Result)#3 (0) {
  37. }
  38. Statement result
  39. array(3) {
  40. [0]=>
  41. int(42)
  42. [1]=>
  43. string(3) "PHP"
  44. [2]=>
  45. int(424242)
  46. }
  47. Change binded param to wrong type
  48. Execute statement
  49. object(SQLite3Result)#4 (0) {
  50. }
  51. Statement result
  52. array(3) {
  53. [0]=>
  54. int(0)
  55. [1]=>
  56. string(3) "PHP"
  57. [2]=>
  58. int(424242)
  59. }
  60. Change binded values
  61. Execute statement
  62. object(SQLite3Result)#3 (0) {
  63. }
  64. Statement result
  65. array(3) {
  66. [0]=>
  67. int(5252552)
  68. [1]=>
  69. string(4) "TEST"
  70. [2]=>
  71. string(3) "!!!"
  72. }