PHP+Mysqli 事务处理
php+mysqli 事物处理
事物就是如果两条或多条数据只要有一条SQL语句错误,那么已经执行成功的执行回滚操作,把已经生效的SQL语句回滚为原来的值
比如A原来有100元,B也有100元,A向B转账50元,那么就要执行两条SQL语句,一个是A的余额要减50,B的余额要加50,
如果第一条语句成功了,但是第二条语句失败了,那么就会丢失数据了,这个时候就需要事务处理了,有一条错误语句,那么已经执行成功的语句都要回滚,返回失败!
代码
直接看代码吧
//SQL连接
$mysqli = new mysqli('127.0.0.1','root','root','test');//实例化Mysqli对象,参数分别是:数据库主机地址,用户名,密码,数据库名
if (mysqli_connect_errno()) {//判断数据库连接是否错误
die(mysqli_connect_error());
}
$mysqli->set_charset('utf8');//设置数据库字符集
$mysqli->autocommit(false); // 开始事务
$sql ='...';
$sql .='...';
if($mysqli->multi_query($sql)){//multi_query() 可以同时执行多条SQL语句
$status_1= $mysqli->affected_rows==1?true:false;//查看第一条SQL语句执行状态
$mysqli->next_result()//下移指针来查看第二条SQL语句状态
$ststus__2 = $mysqli->affected_rows==1?true:false;//第二条SQL语句状态
if($status_1 && $_status_2){//判断两条SQL语句状态,如果都为true,则提交事务,否则回滚
$mysqli->commit();//提交事务
}else{
$mysqli->rollback();//回滚
}
}
$mysqli->autocommit(true);//关闭事务
$mysqli->close();//关闭SQL连接