2009-05-05 13 views
0

私は単純なmysqlデータベースを持っており、このPHPコードを使用して更新しています。私は、ユーザーが最新のリストの一番上に自分自身をバンプできるように沿って、「ユーザー名」の主キーとINTO REPLACE使用私のmysqlテーブルの行の更新回数をカウント

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

...

私はバンプ数を追加したいと思います。エントリが更新された(または "置き換えられた")回数。

どうすればいいですか?

ありがとうございます!

+5

OO、そのようなSQLクエリ内の変数は、私の肌のクロールになります。あなたは本当にSQLインジェクションと、なぜあなたが1つのSQLインジェクションの犠牲者になりたくないのかを調べるべきです。その後、PDOまたはmysqliに切り替えてください。 :) –

答えて

2

INSERT ... ON DUPLICATE KEY UPDATEを使用すると、既存の行を実際に更新することができます。

@dot

$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

最初に、カウントを維持するために別の列をテーブルに追加する必要があります。

第2に、おそらくREPLACEの代わりにUPDATEステートメントを使用するべきです。

REPLACEは実際には行を削除してから、新しい行をINSERTすると効率的ではありません。

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

"bumpCount = bumpCount + 1"についての疑問...第2のbumpCountは何ですか?現在の番号の変数?何とかそれを定義しなければなりませんか?ありがとう! – dot

+0

これは、フィールドbumpCountの既存の値です。 –

+0

ありがとう、ダリル..私はどこかに既存の値を定義する必要がありますか? – dot

0

あなたは、テーブル内の別の列としてあなた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; 
関連する問題