查询插入或如果需要更新记录

时间:2012-03-17 19:52:38

标签: php mysql sql

  +----------------+-----------+
  |name(varchar)PK |money(int) |
  +----------------+-----------+

我如何制定一个查询,以便它可以:

1.能够插入名称和金钱值

2.如果上述名称已经存在,则只应通过将其值与表单中的值相加来更新money列。 尝试使用:

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

它符合第一个要求,但在更新money列时,它只是将旧值替换为新值,不添加它们。

以下是完整代码(草稿版本):

        <?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!");



    }


    ?>

5 个答案:

答案 0 :(得分: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已正确转义

答案 1 :(得分: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;

答案 2 :(得分:0)

尝试省略'钱。这将使它成为colmmn而不是字符串

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

如果主键存在,则替换将删除旧行,因此您无需添加任何内容。