Я новичок в 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)';
Я думаю, это поможет вам. Благодарю.