bug76386.phpt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. --TEST--
  2. Prepared Statement formatter truncates fractional seconds from date/time column (bug #76386)
  3. --EXTENSIONS--
  4. mysqli
  5. --SKIPIF--
  6. <?php
  7. require_once('skipifconnectfailure.inc');
  8. require_once("connect.inc");
  9. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
  10. die("skip Cannot connect to check required version");
  11. /* Fractional seconds are supported with servers >= 5.6.4. */
  12. if (mysqli_get_server_version($link) < 50604) {
  13. die(sprintf("skip Server doesn't support fractional seconds in timestamp (%s)", mysqli_get_server_version($link)));
  14. }
  15. mysqli_close($link);
  16. ?>
  17. --FILE--
  18. <?php
  19. require_once('connect.inc');
  20. // test part 1 - TIMESTAMP(n)
  21. $link = new mysqli($host, $user, $passwd, $db, $port, $socket);
  22. $link->query('DROP TABLE IF EXISTS ts_test;');
  23. $link->query(
  24. 'CREATE TABLE ts_test (id bigint unsigned auto_increment primary key, ' .
  25. 'ts timestamp default current_timestamp(), ts2 timestamp(2) default ' .
  26. 'current_timestamp(2), ts2b timestamp(2) default "2018-01-01 03:04:05.06", ' .
  27. 'ts4 timestamp(4) default current_timestamp(4), ts4b timestamp(4) default ' .
  28. '"2018-01-01 03:04:05.0070", ts6 timestamp(6) default current_timestamp(6), ts6b ' .
  29. 'timestamp(6) default "2018-01-01 03:04:05.008000") character set utf8 collate ' .
  30. 'utf8_general_ci;'
  31. );
  32. $link->query(
  33. 'INSERT INTO ts_test (ts, ts2, ts4, ts6) VALUES ("2018-01-01 11:22:33", ' .
  34. '"2018-02-02 11:22:33.77", "2018-03-03 11:22:33.8888", ' .
  35. '"2018-04-04 11:22:33.999999");'
  36. );
  37. $stmt = $link->prepare('SELECT * FROM ts_test;'); // must be statement
  38. if ($stmt) {
  39. $stmt->execute();
  40. $tsid = $ts = $ts2 = $ts2b = $ts4 = $ts4b = $ts6 = $ts6b = null;
  41. $stmt->bind_result($tsid, $ts, $ts2, $ts2b, $ts4, $ts4b, $ts6, $ts6b);
  42. $stmt->fetch();
  43. var_dump($ts, $ts2, $ts2b, $ts4, $ts4b, $ts6, $ts6b);
  44. $stmt->free_result();
  45. } else {
  46. echo('[FIRST][FAIL] mysqli::prepare returned false: ' . $link->error . PHP_EOL);
  47. }
  48. $link->close();
  49. // test part 2 - TIME(n)
  50. $link = new mysqli($host, $user, $passwd, $db, $port, $socket);
  51. $link->query('DROP TABLE IF EXISTS t_test;');
  52. $link->query(
  53. 'CREATE TABLE t_test (id bigint unsigned auto_increment primary key, ' .
  54. 't time default "11:00:00", t2 time(2) default "11:00:00.22", t4 ' .
  55. 'time(4) default "11:00:00.4444", t6 time(6) default "11:00:00.006054") ' .
  56. 'character set utf8 collate utf8_general_ci;'
  57. );
  58. $link->query(
  59. 'INSERT INTO t_test (t, t2, t4, t6) VALUES ("21:22:33", "21:22:33.44", ' .
  60. '"21:22:33.5555", "21:22:33.676767");'
  61. );
  62. $link->query('INSERT INTO t_test VALUES ();');
  63. $stmt = $link->prepare('SELECT * FROM t_test;');
  64. if ($stmt) {
  65. $stmt->execute();
  66. $tid = $t = $t2 = $t3 = $t4 = null;
  67. $stmt->bind_result($tid, $t, $t2, $t4, $t6);
  68. while ($stmt->fetch()) {
  69. var_dump($t, $t2, $t4, $t6);
  70. }
  71. $stmt->free_result();
  72. } else {
  73. echo('[SECOND][FAIL] mysqli::prepare returned false: ' . $link->error . PHP_EOL);
  74. }
  75. $link->close();
  76. ?>
  77. --EXPECT--
  78. string(19) "2018-01-01 11:22:33"
  79. string(22) "2018-02-02 11:22:33.77"
  80. string(22) "2018-01-01 03:04:05.06"
  81. string(24) "2018-03-03 11:22:33.8888"
  82. string(24) "2018-01-01 03:04:05.0070"
  83. string(26) "2018-04-04 11:22:33.999999"
  84. string(26) "2018-01-01 03:04:05.008000"
  85. string(8) "21:22:33"
  86. string(11) "21:22:33.44"
  87. string(13) "21:22:33.5555"
  88. string(15) "21:22:33.676767"
  89. string(8) "11:00:00"
  90. string(11) "11:00:00.22"
  91. string(13) "11:00:00.4444"
  92. string(15) "11:00:00.006054"
  93. --CLEAN--
  94. <?php
  95. require_once('connect.inc');
  96. $link = new mysqli($host, $user, $passwd, $db, $port, $socket);
  97. $link->query('DROP TABLE ts_test;');
  98. $link->query('DROP TABLE t_test;');
  99. $link->close();
  100. ?>