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

我怎么能制定一个查询,以便它可以:查询插入或如果需要更新记录

1.Be能够插入的名称和货币价值

2.如果说名字已经存在,它应该只通过增加它的值和它从表单中获得的值来更新钱列。 尝试使用:

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

您试过了: REPLACE INTO实际SET name ='$ name',money = SUM(money,$ amount) 顺便说一下。你的代码非常危险!它允许SQL注入攻击。 – 2012-03-17 19:56:58

+0

请阅读SQL注入...请参阅:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan 2012-03-17 20:01:59

+0

我知道,这是草稿版本:)谢谢反正! – tutak 2012-03-17 20:09:05

回答

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 2012-03-17 20:08:31

0

尝试留出了“ '关于金钱。这将保持它作为colmmn而不是一个字符串

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

更换是否存在这样要添加到没有主键将删除旧行。

相关问题