2012-03-17 13 views
1
+----------------+-----------+ 
    |name(varchar)PK |money(int) | 
    +----------------+-----------+ 

は、どのように私は、クエリを策定することができ、それができるように:クエリは、挿入するか、必要に応じて更新レコード場合

言っ名2.Ifは名前とお金の価値

を挿入することができ

1.Beすでに存在しているのは、その値をフォームから取得して追加するだけで、money列を更新する必要があります。 は、使用してみました:

REPLACE INTO practable SET name = '$name', money = 'money' + $amount 

それは最初の要件を満たしますが、お金の列を更新しながら、それは単に新しいものと古い値を置き換え、それらを追加しません。ここで

は、完全なコード(ドラフト版)です:

 <?php 
      //This script by another form which takes the amount and name paramters from user 
    if(!empty($_GET['nameg']) && !empty($_GET['amountg'])){ 

     $user="root"; 
     $pass="password"; 
     $db="practice"; 
     $name=$_GET['nameg']; 
     $amount=$_GET['amountg']; 

     mysql_connect('localhost',$user,$pass) or die("Connection Failed!, " . mysql_error()); 
     $query="REPLACE INTO practable SET name = '$name', given = 'given' + $amount"; 
     mysql_select_db($db) or die("Couldn't connect to Database, " . mysql_error()); 
     mysql_query($query) or die("Couldn't execute query! ". mysql_error()); 
     mysql_close() or die("Couldn't disconnect!"); 



    } 


    ?> 
+0

試しましたか? 実際のSET name = '$ name'に置き換えて、money = SUM(money、$ amount) ところで。あなたのコードは非常に危険です! SQLインジェクション攻撃が可能です。 –

+0

SQLインジェクションを読んでください...参照してください:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan

+0

私は知っている、それはドラフトバージョンです:)ありがとうございました! – tutak

答えて

3

insert ... on duplicate key updateを試してみてください。私はあなたの変数を想定し

INSERT INTO practable(name,money) VALUES('$name',$amount) ON DUPLICATE KEY UPDATE 
name = '$name', money = `money` + $amount 

$name$amount適切

+0

これは完璧に動作します!ありがとう。 – tutak

0

"を除外しようとエスケープされています'お金に。それは文字列としてではなく、コロンとして維持されます

1

あなたはINSERT ... ON DUPLICATE UPDATE構文を探しています。ドキュメントから

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE c=c+1; 

UPDATE table SET c=c+1 WHERE a=1; 
0

はこれを試してください:あなたは何も追加されているように、主キーが存在するかどう

$query="REPLACE INTO practable SET name = '$name', given = given+" . (int)$amount; 
0

置き換えが古い行を削除します。

関連する問題