2012-01-08 16 views
3

我在php中設置了一個事件,並將它保存到mysql。之後,我想更新事件,但爲了知道哪個事件需要更新,我使用它創建的時間。爲mysql行使用標識符

但是,如果幾個事件在同一秒開始,我可能遇到問題,如果我們有很多用戶。我的解決方案是檢查starttime和usernumber,我認爲它應該足夠獨特。這個可以嗎?有沒有更好的方法來做到這一點?

首先,創建活動時:

$starttime = time(); 
mysql_query("INSERT INTO events (userid, starttime) 
      VALUES ('$userid', '$starttime')"); 

後來,更新事件:

mysql_query("UPDATE events 
      SET newdata='$newdata' 
      WHERE starttime='$starttime' 
      AND userid='$userid'"); 

回答

6

不好的路要走。只要把auto_incrementing主鍵ID字段該表上的,它會給你,你可以唯一地標識與行保證唯一的非重複值不重疊/衝突的任何恐懼:

ALTER TABLE events ADD id int unsigned primary key auto_increment; 

您可檢索值插入查詢後自動:

$sql = "INSERT ..."; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $new_id = mysql_insert_id(); // see here: http://us2.php.net/manual/en/function.mysql-insert-id.php 

    ... other stuff... 

    $sql = "UPDATE ... WHERE id = $new_id;": 
    $result = mysql_query($sql) or die(mysql_error()); 
+0

我複製粘貼的MySQL,但得到一個錯誤的語法不符合我的服務器的版本。在'unsigned int primary key auto_increment';它在數據庫MySQL 5.0.45中說,它也說mysql客戶端5.0.22(我假設其中的一個是版本)。謝謝! – 2012-01-08 04:44:21

+0

oops,應該是'int unsigned'。我會編輯答案。 – 2012-01-08 04:54:21

+0

好吧,它現在工作。添加列。謝謝 – 2012-01-08 05:12:19

1

使用mysql_insert_id()在先前結束時獲得該表中的自動增量字段的值插入相同的連接。