2011-12-24 34 views
0

這是有效的嗎?創建新行條目時從mysql行檢索時間戳

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

timestamp是一個mysql列,它在創建行時會生成一個時間戳。

例如 - 我需要指定創建「timestamp」行嗎? (我認爲它沒問題,可以自己配置) -can這兩個動作可以在同一個查詢中執行嗎?如果沒有,我該怎麼辦?我想確保獲得時間戳,因爲稍後在代碼中將其用作此條目的唯一標識符。我怎麼才能得到它? (假設在其他許多行條目中可能有多個條目)。

謝謝!

+0

哇!非常好 – macjohn 2011-12-24 10:18:43

+0

tnx :)我希望這是可能的 – 2011-12-24 10:40:57

回答

1

這不是一個有效的mysql語句。作爲一個選項,您可以改用PHP函數。

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

好吧,我明白了,我會用一個句柄,好的呼叫。謝謝..但是不存在時間戳可能會在php和生成它們的mysql之間停留一個毫秒的風險? – 2011-12-24 10:45:08

+0

是的,我認爲這是可能的。如果毫秒對您來說很重要,您可以使用TIMESTAMP數據類型和DEFAULT CURRENT_TIMESTAMP選項爲您的表添加另一個字段。但在這種情況下,您需要使用另一個查詢從您插入的行中檢索那個時間。 – Placido 2011-12-24 11:05:37

+0

是的,但我該如何檢索那個時間?這正是我的問題。我怎麼知道我正在檢索正確的條目? ( – 2011-12-24 11:30:45

1

不,這不是有效的語法。

一種替代方法是將now()指定給變量,並在timestamp列中使用該變量而不是自動生成的值。

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

這就是我正在考慮做的事情,但我正在考慮'時間();'現在'和'時間'有什麼區別?(我試過時間,但它給了我所有的零。在這種情況下的列?int?varchar?與多少空間?)謝謝! – 2011-12-24 10:47:58

+0

時間戳很好。你可以指定一個時間戳列任何有效的日期值(1970-2034或類似的東西) – 2011-12-24 11:43:24

2

我要看你需要的信息。如果您需要將其與其他行/實體存儲在一起,並希望它保持一致,那麼我會將日期存儲在PHP中(可能會在Web應用程序中針對每個請求執行一次),然後在整個過程中使用該日期。

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

這種方式無處不在你使用時間戳它將是一致的。您的請求不需要花費幾秒鐘時間就可以在時間戳內變化。

即使您沒有將它存儲在其他任何地方,如果您需要檢索該信息,唯一的另一種方式是兩個查詢,並且這很可能會更有效,您仍可能想要使用此方法。

這並不意味着自動填充MySQL日期字段是沒有任何意義的,因爲它只是記錄了以後檢索的信息,所以在MySQL中執行它當然是有意義的。

+0

好吧,這是偉大的感謝,我應該使用什麼數據類型的這一列?我在這種方式之前嘗試過,但它全部是零......一定是使用了錯誤的數據類型,所以我想改變它,但我同意 - 你說得對,這可能是最好的方法。 – 2011-12-24 11:33:40

+0

查看關於日期格式的其他問題!就個人而言,我會使用MySQL的DATETIME格式(並確保在上面的示例中適當地格式化了unix時間戳)。 – liquorvicar 2011-12-24 12:56:48

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.'"')