2011-06-20 51 views
1

我做了什麼,我想知道,如果是另一種方式來做到這一點另一種方式來「INSERT INTO」如果不存在

$this = $CURUSER["id"]; 
mysql_query("UPDATE wuploaders SET uploads=uploads+1 WHERE userid=$this") or die(mysql_error());   
if (mysql_affected_rows() == 0) 
    mysql_query("INSERT INTO wuploaders (userid, uploads) VALUES ('$this','1')") or die(mysql_error()); 

一切順利, 扎姆菲爾

+0

要小心,mysql_affected_rows將返回0,如果該行匹配,但實際上沒有更改(集合中的數據與已記錄的數據相同),除非您在連接到mysql時指定CLIENT_FOUND_ROWS標誌 –

回答

8
INSERT INTO wuploaders (userid, uploads) VALUES ('$this','1') 
ON DUPLICATE KEY UPDATE uploads = uploads+1 

它將如果用戶標識符是唯一/主鍵,則工作

+0

非常感謝許多 –

0

如果您已經有了上傳數量,您還可以使用REPLACE

REPLACE INTO wuploaders (userid, uploads) VALUES ($userid, $count); 

@ a1ex07的解決方案可能是不太妙,雖然方式:)

0

除此之外其他人所說的INSERT..ON DUPLICATE KEY UPDATE語法,有時它是適合使用REPLACE。它基本上是一行的DELETE,然後是新值的INSERT。

這有一些副作用,如觸發刪除和插入觸發器。它也受到引用完整性約束,因此如果有任何子行引用要替換的行,則REPLACE將失敗,否則刪除將級聯並刪除子行。

有時候REPLACE很方便,但請記住這些問題。