2011-12-24 15 views
0

これは有効ですか?新しい行エントリの作成時にmysql行からタイムスタンプを取得する

<?php 
     $timestamp = mysql_query("INSERT INTO column1 (entry1, entry2) 
            VALUES ('$entry1', '$entry2') 
            AND SELECT timestamp"); 
    ?> 

timestampは、行の作成時にタイムスタンプを生成するmysql列です。

-do「タイムスタンプ」行の作成を指定する必要がありますか? (私はそれが大丈夫だと思うので、それ自身でそれを行うように設定されています) - これらの2つのアクションは同じクエリ内で実行できますか?もしそうでなければ、どうすればいいのですか?私はタイムスタンプを取得したいのですが、コードの後半でこのエントリの一意の識別子としても使用します。どうすればそれを手に入れることができますか? (他の行エントリの多くに複数かつ類似したエントリが存在することが想定されている)。

ありがとうございます!

+0

うわー!非常にいい – macjohn

+0

tnx :)私はそれが可能であることを願って –

答えて

1

これは有効なmysqlステートメントではありません。オプションとして、代わりにPHP関数を使用することができます。

$sql = "INSERT INTO column1 (entry1, entry2) VALUES ('$entry1', '$entry2')"; 
$timestamp = mysql_query($sql) ? time() : null; 
+0

わかりました、私はハンドル、良いコールを使用します。ありがとう..しかし、タイムスタンプがphpとmysqlの間に1ミリ秒の間隔を置いてしまう危険性はありませんか? –

+0

はい、私はそれが可能です。 milisecondsが重要な場合は、TIMESTAMPデータ型とDEFAULT CURRENT_TIMESTAMPオプションを使用して別のフィールドをテーブルに追加することができます。しかし、この場合は、挿入した行からその時刻を取得するために別のクエリを使用する必要があります。 – Placido

+0

はい、その時間はどのように取得できますか?これはまさに私の質問です。私は正しいエントリを取得していることをどのように知っていますか? :( –

1

いいえ、有効な構文ではありません。

もう1つの方法は、now()を変数に代入し、自動的に生成された値の代わりにtimestamp列でそれを使用することです。

set @now = now(); 
insert into your_table (timestamp_column) values (@now); 
select @now(); 
+0

これは私がやろうと思っていたものですが、私は 'time();を考えていました。' now'と 'time'の違いは何ですか?この場合の列?int?varchar?どのくらいのスペース?)ありがとう! –

+0

タイムスタンプは問題ありません。タイムスタンプの列に有効な日付の値(1970-2034など)を割り当てることができます。 –

2

私は必要な情報に依存します。他の行やエンティティに対して保存する必要があり、一貫性を持たせたい場合は、PHPで日付を保存し(Webアプリケーションでリクエストごとに1回)、その日付を使用します。

$currentTimestamp = time(); 
$timestamp = mysql_query("INSERT INTO column1 (entry1, entry2, timestamp_col) 
           VALUES ('$entry1', '$entry2', $currentTimestamp); 

どのようにタイムスタンプを使用しても、一貫性があります。あなたの要求はタイムスタンプがその中で変化するのに秒を要しません。

これを他のものに保存していない場合でも、この方法を使用する必要がある場合は、2つのクエリだけでこの情報を取得する必要がある場合があります。これが最も効率的です。

これは、MySQLの日付フィールドを自動入力する意味がないことを意味するわけではありません。後で取得するためにその情報をログに記録するだけなので、MySQL内で行うのが理にかなっています。

+0

大丈夫です。この列にはどのデータ型を使用しますか?私はこの方法の前に試しましたが、すべてゼロになってしまっています...間違ったデータ型を使用しているはずですので、変更すると思っていましたが、私は同意します。 –

+0

日付の形式についてのあなたの他の質問を参照してください!個人的に私はMySQLのDATETIME形式を使用します(上記の例ではunixタイムスタンプを適切にフォーマットしてください)。 – liquorvicar

0

タイムスタンプの値がタイムスタンプのセルに正確に収まるようにするには、そのIDのタイムスタンプを取得するために挿入IDを取得してから最後の挿入IDを使用する必要があります。 いいえ、

$query = mysql_query('INSERT INTO my_table("username","password") VALUES("falcon","test") '); 
$last_id = mysql_insert_id($query); // This gets your id of the row inserted by $query 
$timstamp = mysql_query('SELECT timestamp FROM my_table where id = "'.$last_id.'"') 
関連する問題