2009-05-05 35 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;