php事务 执行sql语句

qaulxy 2009-07-26 01:46:26
我在学习事务处理用户直接的转账的问题,数据表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元。

应该用不少人用过支付宝即时转账把,如果转出方 输入接收方的帐户不存在的话,应该失败的,怎么才能做到呢?谢谢

...全文
155 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wengsuny 2010-01-02
使用这个函数mysql_info()
<?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)
回复
wengsuny 2010-01-02
很简单的,执行后判断执行结果,
回复
ljf_ljf 2009-07-26
楼主注意下面几点 :
1 数据库操作一定要使用事务来完成,不然你很难保证MySQL 是否已经完成了你输入SQL内容。
2 更新记录之前记得使用行锁,避免系统并发造成问题
3 先完成第二部内容再进行更新前检查。防止程序检查数据不是最新内容而出错。
4 一定制定RollBack机制,遇到错误就全部RollBack保持系统完整性。
5 操作数据库程序是一个系统核心内容,一定要小心和确定逻辑关系才能编写啊。
回复
mrshelly 2009-07-26
当然,还要对扣款帐户的余额等都要做查询的..

事实证明. 程序的逻辑最重要. 而不是简简单单能操作数据库就认为可以写一些程序了.
回复
mrshelly 2009-07-26
在你执行 UPDATE SQL的时候, 先 Query 一次数据表 $_POST['from'] 帐号是否存在.
不存在,报错.

这么简单的逻辑不能想到?
回复
YHL27 2009-07-26
关注!!
回复
fenyao 2009-07-26
关注
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告