if($do=="editsellservice"){
目前成都創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、柳南網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
If_rabc($action,$do); //檢測權(quán)限
$sql="UPDATE rv_info SET editsellserviceid = 1 WHERE id='".$_POST["id"]."' LIMIT 1";
if($db-query($sql)){echo success($msg);}else{echo error($msg);}
exit;
}
修改了sql語句
MySQL
Update
Set
更新數(shù)據(jù)
UPDATE
更新
UPDATE
SET
語法用于修改更新數(shù)據(jù)表中的數(shù)據(jù)。
語法:
UPDATE
tb_name
SET
column1
=
new_value1,column2
=
new_value2,…
WHERE
definition
該語法將數(shù)據(jù)表中符合
WHERE
條件的記錄中的
column1
的值更新為
new_value1,column2
的值更新為
new_value2
,以此類推。如果省略
WHERE
條件,則會(huì)將表中所有記錄的
column
值進(jìn)行更新。
例子:
?php
$conn
=
@mysql_connect("localhost","root","root123");
if
(!$conn){
die("連接數(shù)據(jù)庫失?。?
.
mysql_error());
}
mysql_select_db("test",
$conn);
mysql_query("set
names
'gbk'");
$sql
=
"UPDATE
user
SET
=
'xiaoming@163.com'
WHERE
username
=
'小明'";
if(mysql_query($sql,$conn)){
echo
"更新數(shù)據(jù)成功!";
}
else
{
echo
"更新數(shù)據(jù)失?。?.mysql_error();
}
?
更新前數(shù)據(jù):
uid
username
password
regdate
1
admin
b7e591c246d010bb2ccd77d52490c85e
admin@5idev.com
1277992339
2
小明
a193686a53e4de85ee3f2ff0576adf01
xiao@163.com
1278063917
3
Jack
0193686a35e4de85ee3f2ff0567adf49
jack@gmail.com
1278061380
4
小王
e10adc3949ba59abbe56e057f20f883e
12345@163.com
1289632955
例子將
user
表中
username
為
小明
的
修改為
xiaoming@163.com
。
更新后數(shù)據(jù):
uid
username
password
regdate
1
admin
b7e591c246d010bb2ccd77d52490c85e
admin@5idev.com
1277992339
2
小明
a193686a53e4de85ee3f2ff0576adf01
xiaoming@163.com
1278063917
3
Jack
0193686a35e4de85ee3f2ff0567adf49
jack@gmail.com
1278061380
4
小王
e10adc3949ba59abbe56e057f20f883e
12345@163.com
1289632955
UPDATE
表達(dá)式
UPDATE
語法允許
SET
后面跟表達(dá)式。
例子
1
:
UPDATE
article
SET
pv
=
pv+1
WHERE
id
=
123
該例子讓
id
為
123
的文章在被點(diǎn)擊閱讀的時(shí)候點(diǎn)擊量加
1
。
例子
2
:
UPDATE
persondata
SET
age
=
age*2,
age
=
age+1
該例子
SET
后面跟了兩個(gè)表達(dá)式:age
=
age*2(年齡加倍),age
=
age+1(再加
1
)。這種多個(gè)表達(dá)式的情況,是按照從左往右順序執(zhí)行的。
以前我用過querylist插件抓數(shù)據(jù),服務(wù)器寫和定時(shí)器,每天固定時(shí)間去運(yùn)行腳本。朝這個(gè)方式試試
高并發(fā)下數(shù)據(jù)的更新,應(yīng)該 update table xxx set num = num - 1 的方式,這種方式可以保證數(shù)據(jù)的正確性。
但是會(huì)出現(xiàn) num 為負(fù)數(shù)的問題,如果庫存為負(fù)數(shù),顯然是不合理的。
于是,需要將 num 字段設(shè)置為 無符號(hào)整型,這樣就不會(huì)出現(xiàn)負(fù)數(shù)了,因?yàn)?,如果減到負(fù)數(shù),就會(huì)更新失敗。
但是這種依然會(huì)造成很多無用的更新語句的執(zhí)行,是不合理的。
于是,update table xxx set num = num - 1 where num 0,
這樣當(dāng) num 等于0之后就不會(huì)去更新數(shù)據(jù)庫了,減少了很多無用的開銷。
這種方式被稱作“樂觀鎖”
此外,對于搶紅包這種非整數(shù)的操作,我們應(yīng)該轉(zhuǎn)換為整數(shù)的操作。
關(guān)于搶購超賣的控制
一般搶購功能是一個(gè)相對于正常售賣系統(tǒng)來說獨(dú)立的子系統(tǒng),這樣既可以防止搶購時(shí)的高并發(fā)影響到正常系統(tǒng),
也可以做到針對于搶購業(yè)務(wù)的特殊處理。
在后臺(tái)設(shè)計(jì)一些功能,可以就昂正常的商品加入到搶購活動(dòng)中并編輯成為搶購商品,寫入到搶購商品表,當(dāng)然
也可以把搶購商品表寫入redis而不是數(shù)據(jù)表。并且在原商品表寫入一個(gè)同樣的商品(id相同,用于訂單查看,
此商品不可購買)
如果是數(shù)據(jù)表,為了控制超賣,需要對表進(jìn)行行鎖,更新的時(shí)候帶上 where goods_amount 0。
如果是redis,使用 hincrby 一個(gè)負(fù)數(shù)來減庫存,并且 hincrby 會(huì)返回改變后的值,再來判斷返回值是否大于0,
因?yàn)閞edis每個(gè)命令都是原子性的,這樣不用鎖表就可控制超賣。
1、首先檢查數(shù)據(jù)庫連接是否正常;
2、檢查更新語句是否正確,如果不正確,請檢查語句中的字段名、表名等是否正確;
3、檢查更新數(shù)據(jù)是否合法,如果不合法,可能會(huì)引起數(shù)據(jù)庫更新失??;
4、如果以上檢查都沒有問題,可以嘗試將更新語句拆分成多條,然后每條語句分別執(zhí)行,以查看哪一條語句出現(xiàn)了問題。