突然想起来有个帖子可以借鉴,但是找不到了~~是关于减少游戏漏洞的.
顺便讨论一个问题,请教用什么方法解决最好
问题:两个银行帐户间的转帐是一个很好的例子。在数据库级,这样的转帐包括两个步骤:首先,从源帐户中扣除转帐的金额,然后将其加到目标帐户中。如果在第二步中发生了错误,那么第一步就必须被取消,以避免不相符的情况(和愤怒的客户聚众滋事)。
请问都有什么好的方法?
我目前只有三个思路:
一,一句mysql 水平不到,不会写 ==!
应该是这两句的加和:
sql_defense11="UPDATE world SET metal =metal-(2000*'$quantity_post') and metal>'$b' WHERE world.id_star =1 ";
sql_defense12="INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW())";
第一句的意思是如果金属够 金属自减这个数量
第二句的意思是如果满足条件一,则完成这个插入
二,储存过程
@a = UPDATE world SET metal =metal-(2000*'$quantity_post') WHERE world.id_star =1 and metal>'$b';
if(@a = ture,INSERT INTO construction (id_star, thing, quantity, time_begin) VALUES ('111', '1', '20', NOW()),'');
三,事物
// connect to database
$dbh = mysqli_connect($host, $user, $pass, $db);
// turn off auto-commit
mysqli_autocommit($dbh, FALSE);
// run query 1
$result = mysqli_query($dbh, $query1);
if ($result !== TRUE) {
mysqli_rollback($dbh); // if error, roll back transaction
}
// run query 2
$result = mysqli_query($dbh, $query2);
if ($result !== TRUE) {
mysqli_rollback($dbh); // if error, roll back transaction
}
// and so on...
// assuming no errors, commit transaction
mysqli_commit($dbh);
// close connection
mysqli_close($dbh);
?>
求当时的帖子 和请教更多方法,谢谢