1

ユーザーのテーブルに新しい行を追加して、各ユーザーの作成日を表示しました。そのためにタイムスタンプと日時の両方のタイプを試しましたが、それでも各ユーザーの横に 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());

そして、ここに情報を表示するコードがあります

$select_users = "SELECT * FROM users";
$result =  mysql_query($select_users);
while ($user = mysql_fetch_array($result)) {
$user_row = sprintf(
"<td><input type='checkbox' name='checkbox[]' id='checkbox[]' value='%d'/></td>" .
"<td>%s %s</td> " .
"<td>%s</td>" .
"<td><a href='mailto:%s'>%s</a></td> " .
"<td>%s</td>" .
"<td><a href='javascript:delete_user(%d);'><img class='delete_user' src='images/trash.png' alt='' title='' border='0' /></a></td>",
$user['user_id'], $user['first_name'], $user['last_name'], $user[username],
$user['email'], $user['email'], $user['created'], $user['user_id']);
echo $user_row;

0000-00-00 00:00:00 を示す作成日を除いて、すべてのフィールドが正しく表示されました。何を間違えたのかわからない。お手伝いありがとう。

編集:「Current_timestamp」を使用する「updated」というフィールドが既にあります。

4

5 に答える 5

3

PHP で時刻を設定する代わりに、created という名前のデータベースにタイムスタンプのタイプでフィールドを作成し、デフォルト値を CURRENT_TIMESTAMP に設定することができます。これにより、php なしで必要なことを自動的に実行できます。コードは次のとおりです。

    ALTER TABLE `users` ADD COLUMN `created` timestamp DEFAULT CURRENT_TIMESTAMP;
于 2012-09-21T12:17:48.390 に答える
1

MySQL は、レコードの作成時に挿入されるフィールドにタイムスタンプを持つ可能性があります。

あなたのSQLでは、作成されたものにこれを入れてください:

`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

タイムスタンプを処理するための PHP コードは必要ありません。

于 2012-09-21T12:18:09.530 に答える
0

$ created = date( "mdy H:i:s"、time());を試してください。

于 2012-09-21T12:15:27.910 に答える
0

current_timestamp を再利用せずに、実際に MySQL 内で現在の時刻を追加できます。これを挿入クエリとして試してください。データベース スキーマの変更は必要なく、正しい結果が得られるはずです。

$query = "INSERT INTO users (first_name, last_name, username, password, email, created)"
. "VALUES('%s', '%s', '%s', '%s', '%s', now())"
于 2012-09-21T12:16:41.263 に答える
0

潜在的な回避策は、$created の値を知っているので、実際にエスケープする必要がないことです。したがって、 $insert_sql は次のようになります。

$insert_sql = sprintf("INSERT INTO users (first_name, last_name, username, password, email, created)"
. "VALUES('%s', '%s', '%s', '%s', '%s', '".$created."');",
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));

これは、変数に関するすべてを完全に制御する場合のみであることに注意してください。

于 2012-09-21T15:11:36.720 に答える