专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql数据库:PDO演绎MYSQL数据... »正文

mysql数据库:PDO演绎MYSQL数据...

来源: 发布时间:星期日, 2008年12月21日 浏览:2次 评论:0
MYSQL5已经开始支持事务处理了事务处理说白了就是荣俱荣损俱损事务中N条语句只要有条执行失败则所有语句都相当于没有执行如果前面已经成功执行了则通过rollback语句回滚到状态[注意有些操作是无法回滚]

PDO作为个被PHP5绑定数据库抽象层对很多数据库都有着出色支持对MYSQL更是如此那么利用PDO来写个MYSQL事务处理也就是理所当然事了

理论上如果要想使用事务处理则在创建数据表时要将表存储引擎[Storage Engine]设置为InnoDB实战过程中发现最后个要操作可以不用是InnoDB如果前面操作出现异常则最后个表就不会有操作也就不用回滚

这里用两个表来演示先建立个数据库名为pdotest在其下建两个数据表表a和表b:
[SQL代码]
-- 主机: localhost
-- 生成日期: 2007 年 12 月 08 日 15:47
-- 服务器版本: 5.0.27
--
-- 数据库: `pdotest`
--
-- --------------------------------------------------------
--
-- 表结构 `a`
--
CREATE TABLE `a` (
`uid` small(10) NOT NULL auto_increment,
`user` varchar(20) NOT NULL,
`age` small(3) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
--
-- 导出表中数据 `a`
--
-- --------------------------------------------------------
--
-- 表结构 `b`
--
CREATE TABLE `b` (
`id` small(10) NOT NULL auto_increment,
`user` varchar(20) NOT NULL,
`money` (100) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
--
-- 导出表中数据 `b`
--
表a存储引擎为InnoDB表b为MyISAM

利用PDO个事务处理:
[PHP代码]
<?php
$dsn='mysql:host=localhost;dbname=pdotest';
$dbuser='root';
$dbpass='password';
try{
$db= PDO($dsn,$dbuser,$dbpass,.gif' />(PDO::ATTR_PERSISTENT=>ture));
echo "创建连接成功\n";
$db->Attribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置异常参数否则无法抓取异常
$db->beginTransaction; //开始个事务
$db->exec('insert o a user="abc",age=24');
$db->exec('insert o b user="abc",m,date=now');
$db->commit; //提交当前事务
}catch(PDOException $e){ //抓取异常并执行回滚
echo "出现异常";
($db->rollBack){
echo "并且回滚成功!";
} {
echo "并且回滚失败!";
}
die('代码:'.$e->getMessage);
}
?>

测试步骤如下:
次写入成功;
第 2次给事务中第 2句SQL制造异情使得对表b写入不成功;
第 3次写入成功

然后查看数据库可以看到表auid字段为1,3而不是1,2原因是第 2次写入对表b獊
标签:mysql数据库

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: