2007-01-13 回答
一. 什么是事务
简单来说就是当所有事件执行成功,事务才执行;若有任何一个事件不能成功执行,事务的其它事件也不被执行二. 如何使用事务
1.mysql_connect连接数据库
$LinkID =mysql_connect('localhost','root','root');//连接数据库
mysql_select_db('test',$LinkID);//将要操作的数据库
mysql_query("set names utf8");//设置编码格式
mysql_query("SET AUTOCOMMIT=0"); //设置mysql不自动提交,需自行用commit语句提交
$sql = "XXXXXXXXX";//第一条sql语句
$sql2 = "XXXXXXXXX";//第二条sql语句
$res = mysql_query($sql);//执行第一条sql语句
$res1 = mysql_query($sql2);//执行第二条sql语句
if($res && $res1){
mysql_query("COMMIT");//成功 提交事务
}else{
mysql_query("ROLLBACK");//错误 至少有一条sql语句执行错误,事务回滚
}
mysql_query("END");//事务结束
2.pdo开启事务
1、关闭 PDO 的自动提交; $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false); 2、开启事务需要的方法; $pdo->beginTransaction(); // 开启一个事务 $pdo->commit(); // 提交事务 $pdo->rollback(); // 回滚事务 3、一般事务处理是运行在 try...catch...语句中,当事务失败时执行 catch 代码段。 try { $pdo->beginTransaction(); // 开启一个事务 $row = null; $row = $pdo->exec("xxx"); // 执行第一个 SQL if (!$row) throw new PDOException('提示信息或执行动作'); // 如出现异常提示信息或执行动作 $row = $pdo->exec("xxx"); // 执行第二个 SQL if (!$row) throw new PDOException('提示信息或执行动作'); $pdo->commit(); } catch (PDOException $e) { $pdo->rollback(); // 执行失败,事务回滚 exit($e->getMessage()); }
在事务中的 SQL 语句,如果出现错误,那么所有的 SQL 都不执行。当所有 SQL 有无误的时候,才提交执行。