MySQL преобразует мои значения временных меток в 0000-00-00

Я новичок в PHP, и в настоящее время я все еще участвую. Думаю, у меня проблемы с моей регистрационной формой. username , password , email все вставить в MySQL успешно. registered и last_seen нет.

Я думал, что использую getTimestamp() неправильно, но это эхо, что мне нужно. Однако, когда я пытаюсь вставить оба поля timestamp в MySql, я вижу 0000-00-00 00:00:00 в этих полях вместо того, что он повторил перед sql-запросом. Что я здесь делаю неправильно? Буду признателен за любую оказанную помощь.

  $date = new DateTime(); $time = $date->getTimestamp(); echo '<div class="box_grey">' . $time . '</div>'; $sql = ' INSERT INTO users (username, password, email, registered, last_seen) VALUES (:username, :password, :email, :registered, :last_seen)'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->bindParam(':email', $email); $stmt->bindParam(':registered', $time); $stmt->bindParam(':last_seen', $time); $stmt->execute(); print '<div class="box_grey">errorCode() ' . $stmt->errorCode() . '<br /><br />'; print_r($stmt->errorInfo()); echo '</div>'; echo '<div class="box_grey">Registered successfully!</div>'; 

Вот что пользователи SHOW CREATE TABLE users; показывает меня.

 CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User''s unique ID number', `username` varchar(16) NOT NULL, `password` varchar(100) NOT NULL, `email` varchar(254) NOT NULL, `registered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', `last_seen` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 

Это происходит довольно часто.
Вы сбиваете с толку временную метку mysql, которая на самом деле является значением DATETIME, подобным значению с отметкой времени UNIX, которая представляет собой количество секунд, прошедших с 1970-01-01.

Вам нужно либо изменить формат поля, либо значение вставки.
Также вы можете найти некоторые функции mysql – CURDATE () или NOW (), например

 $sql = 'INSERT INTO users VALUES (NULL,:username,:password,:email,NOW(),NOW())'; $stmt = $pdo->prepare($sql); $stmt->execute(array($username, $password, $email)); 

Но лично я бы избегал временных меток mysql. они могут быть неожиданно изменены, разрушая все ваши данные. Я бы использовал DATETIME и задал все значения вручную.

Вы можете использовать FROM_UNIXTIME() для преобразования временных меток UNIX в MySQL date:

 // $date = new DateTime(); $time = $date->getTimestamp(); // $time = time(); // $time = 1360569298; $sql = 'INSERT INTO users ( username, password, email, registered, last_seen ) VALUES ( :username, :password, :email, FROM_UNIXTIME(:registered), FROM_UNIXTIME(:last_seen) )'; // .... $stmt->bindParam(':registered', $time); $stmt->bindParam(':last_seen', $time); 
 set timestamp field default value `current_timestamp` and use the query like below $sql = ' INSERT INTO users (username, password, email) VALUES (:username, :password, :email)'; 

Я думаю, это поможет вам. Благодарю.