2009-05-05 42 views
0

我有一個簡單的mysql數據庫,並使用此PHP代碼來更新它。計數在我的MySQL表中更新的行數

mysql_query("REPLACE INTO `$db_table` (username, live, datetime, ip) 
VALUES ('$username', '1', '$timeofentry', '$ip')"); 

我用REPLACE INTO一起的「用戶名」主鍵,讓用戶自己磕碰到最近列表的頂部...

我想補充一個凸起計數。條目已更新(或「替換爲」)的次數。

我該怎麼做呢?

非常感謝!

+5

OO,變量的SQL查詢中一樣,讓我的皮膚爬行。你應該仔細研究SQL注入以及爲什麼你不想成爲一個受害者。之後,繼續並切換到PDO或mysqli。 :) – 2009-05-05 04:14:03

回答

2

您可以使用INSERT ... ON DUPLICATE KEY UPDATE執行現有行的實際更新。

$mysql = mysql_connect(.. 
... 
$username = mysql_real_escape_string(... 
$ip = mysql_real_escape_string(... 
... 
$query = " 
    INSERT INTO 
    `$db_table` 
    (username, live, datetime, ip) 
    VALUES 
    (
     '$username', 
     '1', 
     '$timeofentry', 
     '$ip' 
    ) 
    ON DUPLICATE KEY UPDATE 
    ip = '$ip', 
    bumpCount = bumpCount + 1 
"; 

$result = mysql_query($query, $mysql);
2

首先,您需要在表中添加另一列以保持計數。

其次,您應該使用UPDATE語句而不是REPLACE。

REPLACE實際上會刪除該行,然後插入一個不很有效的新行。

UPDATE `$db_table` SET datetime = NOW(), ip = '$IP', 
     bumpCount = bumpCount + 1 WHERE username = '$username' LIMIT 1; 
+0

想知道「bumpCount = bumpCount + 1」...什麼是第二個bumpCount?當前編號的變量?我必須以某種方式定義?謝謝! – dot 2009-05-05 05:54:24

+0

這是字段bumpCount的現有值。 – 2009-05-05 20:09:28

+0

謝謝,達里爾..我必須在某個地方定義現有的價值嗎? – dot 2009-05-05 21:50:33

0

@dot

你會定義bumpCount場作爲表的另一列。我建議將其設置爲默認值。

那麼你的表的定義是一段類似:

CREATE TABLE my_table 
(username varchar(255) not null primary key, 
    live int, 
    datetime datetime not null, 
    ip varchar(15) not null, 
    bumpCount int unsigned not null default 1); 

而且你的插入/更新會是這樣的:

INSERT INTO my_table (username,live,datetime,ip) 
    VALUES 
    ('$username',1,now(),'$ip') 
    ON DUPLICATE KEY UPDATE datetime=now() ip='$ip', bumpCount=bumpCount + 1;