+----------------+-----------+
|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!");
}
?>
答案 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)
如果主键存在,则替换将删除旧行,因此您无需添加任何内容。