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