0

以前に同様の質問をしましたが、まだ有効な回答が得られませんでした。したがって、データベースには、ユーザーに関する情報(first_name、email ...)と、作成日(「作成」)と更新日(「更新」)を含む2つのフィールドを含むテーブルがあります。「更新済み」フィールドのタイプは TIMESTAMP 、デフォルトは ="CURRENT_TIMESTAMP"、属性は ="on Current_timestamp" です。また、「created」フィールドには type="datetime" があり、null default="none" ではありません。問題は、作成日を表示するときに、各ユーザーの横に「0000-00-00 00:00:00」を取得したことです。データベースにユーザーを追加するコードは次のとおりです。

$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$username = trim($_REQUEST['username']);
$password = trim($_REQUEST['password']);
$email = trim($_REQUEST['email']);
$created = strftime("%Y-%m-%d %H:%M:%S", time());
$insert_sql = sprintf("INSERT INTO users (first_name, last_name, username, password, email, created)" .
"VALUES('%s', '%s', '%s', '%s', '%s', '%s');",
mysql_real_escape_string($first_name),
mysql_real_escape_string($last_name),
mysql_real_escape_string($username),
mysql_real_escape_string(crypt($password, $username)),
mysql_real_escape_string($email),
mysql_real_escape_string($created));
mysql_query($insert_sql) or die(mysql_error());

助けてください、date()、now() などのさまざまな関数を試しましたが、まだ機能しません。

編集:私のテーブルが示すもの:

mysql> SELECT updated, created from users;
+---------------------+---------------------+
| updated             | created             |
+---------------------+---------------------+
| 2012-09-21 09:09:49 | 0000-00-00 00:00:00 |
| 2012-09-21 09:27:27 | 0000-00-00 00:00:00 |
| 2012-09-22 11:36:19 | 0000-00-00 00:00:00 |
| 2012-09-22 11:43:35 | 0000-00-00 00:00:00 |
+---------------------+---------------------+
4

3 に答える 3

0

フィールドはタイムスタンプであるため、タイムスタンプを入力する必要があります。

INSERT INTO users 
    (first_name, last_name, username, password, email, created)
    VALUES('%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP());
于 2012-09-22T10:33:13.570 に答える
0

タイムスタンプ フィールドに文字列を入力しています。代わりにmysql 関数 NOW()を使用してください。クエリは次のようになります。

"INSERT INTO `users` (
     `first_name`,
     `last_name`,
     `username`,
     `password`,
     `email`,
     `created`) VALUES (
            '%s',
            '%s',
            '%s',
            '%s',
            '%s',
            NOW())"

また、mysqli準備済みステートメントを利用するために移行することを検討してください。

コメントを明確にするため。フィールドがどのタイプであるかは問題ではありません.MySQLはあなたがそれを与えた場合にそれを処理する方法を知っているからですNOW():

mysql> create table temp (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ts TIMESTAMP, dt DATETIME);
Query OK, 0 rows affected (0.00 sec)

mysql> insert into temp values ('',NOW(),NOW()),('',NOW(),NOW());
Query OK, 2 rows affected, 2 warnings (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp;
+----+---------------------+---------------------+
| id | ts                  | dt                  |
+----+---------------------+---------------------+
|  1 | 2012-09-22 13:38:50 | 2012-09-22 13:38:50 |
|  2 | 2012-09-22 13:38:50 | 2012-09-22 13:38:50 |
+----+---------------------+---------------------+
2 rows in set (0.00 sec)

挿入しようとすると、機能しませんUNIX_TIMESTAMP():

mysql> insert into temp values ('',UNIX_TIMESTAMP(),UNIX_TIMESTAMP());
Query OK, 1 row affected, 3 warnings (0.00 sec)

mysql> select * from temp order by id desc limit 1;
+----+---------------------+---------------------+
| id | ts                  | dt                  |
+----+---------------------+---------------------+
|  7 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)
于 2012-09-22T10:31:23.113 に答える
0

0000-00-00 00:00:00レコードにタイムスタンプ値があるかどうかを確認できますか。
これは、テーブルを変更した場合の通常の問題でありcreate column timestamp (not null default CURRENT_TIMESTAMP) in MYSQL、以前のレコードがタイムスタンプで更新されます0000-00-00 00:00:00

解決策は、データベース レコードを更新して、0000-00-00 00:00:00

それが役立つことを願っています!

于 2012-09-22T10:31:26.577 に答える