事物的应用
有时候程序处理的时候需要两项或者多项数据处理一个失败其他的都不再执行,之间的关系是一错则全错,全都执行成功才算成功;这里就需要用到事务处理,错误回滚;
废话不多说 上代码:
$LinkID =mysql_connect('localhost','root','root');//连接数据库
mysql_select_db('test',$LinkID);//将要操作的数据库
mysql_query("set names utf8");//设置编码格式
mysql_query("SET AUTOCOMMIT=0"); //设置MySQL不自动提交,需自行用commit语句提交
$sql = "insert into t1(username,password,rtime,rip) values('shiwu2','shiwu2','456456456','456456456')";//第一条执行语句
$sql2 = "insert into t1(username,password,rtime,rip) values('shiwu2',shiwu2','456456456','456456456')";//这条我故意写错
$res = mysql_query($sql);//执行第一条sql语句
$res1 = mysql_query($sql2);//执行第二条sql语句
if($res && $res1){
mysql_query("COMMIT");//提交事务
echo '提交成功。';
}else{
mysql_query("ROLLBACK");//至少有一条sql语句执行错误,事务回滚
echo '数据回滚。';
}
mysql_query("END");//事务结束
下面的写法是PHP的PDO的实现方式
try{
//1.实例化PDO对象
$pdo = new PDO("mysql:host=localhost;dbname=test","root","root",array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//1.开启事务
$pdo->beginTransaction();
//2.执行sql语句
$pdo->exec("insert into t1(username,password,rtime,rip) values('shiwu2','shiwu2','456456456','456456456')");
$pdo->exec("insert into t2(username,password,rtime,rip) values('shiwu2',shiwu2','456456456','456456456')");
//提交事务
$pdo->commit();
//PDO PDOStatement PDOException
}catch(PDOException $e){
echo "aaaaaaaaaa";
//回滚事务
$pdo->rollBack();
}