PHP中执行MYSQL事务解决数据写入不完整等情况

yipeiwu_com5年前Mysql基础
近来稍有时间研究了下MYSQL中的事务操作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时操作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的操作会导致初始化了一张表 ,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提示注册失败,但是用户已经注册了部分信息,这个时候需要程序员去数据库删除相应的数据是一个比较不好的事情。

因此这边考虑使用事务,事务可以进行模拟SQL操作,当所有的SQL都操作成功的时候才进行SQL操作,只要有一个操作失败就回滚当前事务的所有SQL操作,避免出现上面描述中出现的数据写入不完整等情况。

下面是鄙人写的一小段代码,欢迎大家参考和提出意见:
复制代码 代码如下:

/**
* @todo 多条sql的事务处理
* @param $sqls array
* @return boole true/false
*/
public function doArraySqlActionsTran($password,$sqls){
$db = $this -> doSqlLink($password);//打开数据库链接
$db -> autocommit(FALSE);//设置为不自动提交,因为MYSQL默认立即执行
//获取SQL执行结果数组
for ($i=0;$i<count($sqls);$i++){
$result[$i] = $db -> query($sqls[$i]);
}
//解析SQL执行结果数组
for ($j=0;$j<count($result);$j++){
if ($result[$j]==FALSE){
$result[$j]='false';
}else{
$result[$j]='true';
}
}
//查找SQL结果数组中是否存在false结果集
if (in_array('false',$result)){
$sqlResult=FALSE;
}else{
$sqlResult==TRUE;
}
//根据结果集进行数据库回滚或者执行操作
if ($sqlResult==FALSE){
$db -> rollback();//判断当执行失败时回滚
$return=FALSE;// 正式环境中使用
//$return='ROOLBACK';//test 标记使用
}else{
$db -> commit();//执行事务s
$return=TRUE;// 正式环境中使用
//$return='COMMIT';//test 标记使用
}
$db->autocommit(true); //设置为非自动提交——事务处理
$db->close();//关闭连接
return $return;
}

到此事务执行批量SQL操作基本完成,谢谢大家!

相关文章

php mysql 判断update之后是否更新了的方法

首先我的建议是遇到问题摆渡一下,php手册翻上1001遍,问题迎刃而解。 我百度了一下,网友给的答案五花八门。 首先纠正百度来的一个错误的方法: 复制代码 代码如下: $sql = "u...

PHP使用mysql_fetch_row查询获得数据行列表的方法

本文实例讲述了PHP使用mysql_fetch_row查询获得数据行列表的方法。分享给大家供大家参考。具体分析如下: 这里使用mysql_fetch_row从mysql数据库中查询数据,...

Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法

03年的时候就看过一本php的书,那时还是php3,回首四年php的在web开的的前景真还是一片光明啊!三年不见的php在去看已到了php5了,现在算起我真正从写第一个php的WEB开始...

PHP连接MySQL数据库并以json格式输出

1.简介 PHP连接数据库有多种方法,现介绍常用的MySQL数据库连接方法,PHP连接MySQL也有两种方式,一是面向对象,二是面向过程方式,两种方法稍有区别。下面通过代码介绍两种方法连...

PHP操作MySQL事务实例

本文实例讲述了PHP操作MySQL事务的方法,分享给大家供大家参考。具体方法如下: 一般来说,事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致...