因此这边考虑使用事务,事务可以进行模拟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$result[$i] = $db -> query($sqls[$i]);
}
//解析sql执行结果数组
for ($j=0;$jif ($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操作基本完成,谢谢大家!
