9

私はPHPが初めてで、現在も学習中です。登録フォームに問題があると思います。usernamepasswordemailすべて正常に MySQL に挿入されます。registeredlast_seenません。

getTimestamp()使い方が間違っていると思いましたが、必要なものが反映されています。ただし、両方のタイムスタンプ フィールドを 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
4

3 に答える 3

13

それはかなり頻繁に発生します。
実際にはDATETIMEのような値であるmysqlタイムスタンプと、1970年1月1日から経過した秒数であるUNIXタイムスタンプを混同しています。

フィールド形式を変更するか、挿入する値を変更する必要があります。
また、CURDATE() や NOW () などの便利な mysql 関数を見つけることもできます。

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

しかし個人的には、mysql のタイムスタンプは避けたいと思います。それらは予期せず変更される可能性があり、すべてのデータが台無しになります。DATETIMEすべての値を手動で使用して設定します。

于 2013-02-11T07:39:39.890 に答える
4

関数を使用FROM_UNIXTIME()して、UNIX タイムスタンプを MySQL 日付に変換できます。

// $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);
于 2013-02-11T07:54:32.193 に答える
-1
set timestamp field default value `current_timestamp` and use the query like below
$sql = '    INSERT INTO users (username, password, email) 
            VALUES (:username, :password, :email)';

役立つと思います。ありがとう。

于 2013-02-11T07:41:54.473 に答える