我在学习事务处理用户直接的转账的问题,数据表account输入了两列数据,分别是: 帐户1有1000元;帐户2有500元,我设置了两个sql语句,一个是给帐户加款的,另一个是给帐户扣款的,其中用来扣除存款的语句是
$result = mysql_query( $connect , " UPDATE accounts SET balance = balance - " . $_POST['money'] . " WHERE id = " . $_POST['from'] ; )
if( $result ){ echo “扣款程序执行成功”;}如果设置 扣款帐户是1,金额是100,接收帐户是2, 指令是可以被执行的,这个的话没错。但是 扣款帐户写3,金额是100,接收帐户是2 ,指令也是被执行成功了,这个就有问题了。
按照常理的话,因为帐号3不存在,sql语句应该是执行失败的啊。但是网页还是显示“扣款程序执行成功”
帐户2的金额也增加了100元。应该用不少人用过支付宝即时转账把,如果转出方 输入接收方的帐户不存在的话,应该失败的,怎么才能做到呢?谢谢
$result = mysql_query( $connect , " UPDATE accounts SET balance = balance - " . $_POST['money'] . " WHERE id = " . $_POST['from'] ; )
if( $result ){ echo “扣款程序执行成功”;}如果设置 扣款帐户是1,金额是100,接收帐户是2, 指令是可以被执行的,这个的话没错。但是 扣款帐户写3,金额是100,接收帐户是2 ,指令也是被执行成功了,这个就有问题了。
按照常理的话,因为帐号3不存在,sql语句应该是执行失败的啊。但是网页还是显示“扣款程序执行成功”
帐户2的金额也增加了100元。应该用不少人用过支付宝即时转账把,如果转出方 输入接收方的帐户不存在的话,应该失败的,怎么才能做到呢?谢谢
不存在,报错.这么简单的逻辑不能想到?
1 数据库操作一定要使用事务来完成,不然你很难保证MySQL 是否已经完成了你输入SQL内容。
2 更新记录之前记得使用行锁,避免系统并发造成问题
3 先完成第二部内容再进行更新前检查。防止程序检查数据不是最新内容而出错。
4 一定制定RollBack机制,遇到错误就全部RollBack保持系统完整性。
5 操作数据库程序是一个系统核心内容,一定要小心和确定逻辑关系才能编写啊。
<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}$db_selected = mysql_select_db("test_db",$con);
$sql = "INSERT INTO person VALUES ('John','Doe','Utah','17')";
$result = mysql_query($sql,$con);$info = mysql_info($con);
echo $info;mysql_close($con);
?>输出类似:String format: Records: 15 Duplicates: 0 Warnings: 0
//Records符合条件的有几条,Duplicates数据被更改的有几个(新老数据一样Duplicates: 0)