博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP+MySQL事务处理示例代码
阅读量:6121 次
发布时间:2019-06-21

本文共 2732 字,大约阅读时间需要 9 分钟。

注意支持事务的表必须是InnoDB类型。本例在 PHP5.2.5+MySQL5.0下测试通过。open_article 表的结构为:

    

 
  1. SET FOREIGN_KEY_CHECKS=0;  
  2.     — —————————-  
  3.     — Table structure for open_article  
  4.     — —————————-  
  5.     CREATE TABLE `open_article` (  
  6.       `nId` int(11) NOT NULL auto_increment,  
  7.       `nOrder` int(11) default ‘0′,  
  8.       `sTopic` varchar(100) default NULL,  
  9.       `sContent` varchar(255) default NULL,  
  10.       `dDatetime` timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,  
  11.       PRIMARY KEY  (`nId`)  
  12.     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  13.  
  14.     <?PHP  
  15.       header(”Content-Type:text/html;charset=utf-8″);  
  16.  
  17.       $host = “localhost”;  
  18.       $user = “root”;  
  19.       $password = “mypassword”;  
  20.       $db = “test_store_proc”;  
  21.       $dblink = mysql_connect($host$user$passwordor die(”Can’t connect to mysql”);  
  22.       mysql_select_db($db$dblink);  
  23.       mysql_query(”SET NAMES UTF8″);  
  24.  
  25.       /* 创建事务 */ 
  26.       mysql_query(’START TRANSACTION’) or exit(mysql_error());  
  27.  
  28.       //第1条插入语句:  
  29.       $sql = “insert into open_article (nOrder, sTopic, sContent) values (0, ‘News Main Topic-1′,’资讯内容-1′)”;  
  30.       if(!mysql_query($sql))  
  31.       {  
  32.          echo $sql .’:<br>’. mysql_errno() . “:” . mysql_error() . “<br>”;  
  33.          mysql_query(’ROLLBACK’) or exit(’ROLLBACKing:’. mysql_error());  //判断当执行失败时回滚  
  34.          exit;  
  35.       }  
  36.  
  37.       //第2条插入语句:  
  38.       $sql = “insert into open_article (nOrder, sTopic, sContent) values (0, ‘News Main Topic-2′,’资讯内容-2′)”;  
  39.       if(!mysql_query($sql))  
  40.       {  
  41.         echo $sql .’:<br>’. mysql_errno() . “:” . mysql_error() . “<br>”;  
  42.         mysql_query(’ROLLBACK’) or exit(’ROLLBACKing:’. mysql_error());  //判断当执行失败时回滚  
  43.         exit;  
  44.       }  
  45.  
  46.       mysql_query(’COMMIT’) or exit(mysql_error());  //执行事务  
  47.  
  48.       mysql_close($dblink);  
  49.     ?>  
  50.  

    如果把第2条插入SQL语句改为:

    $sql = “insert into open_article (nOrder, sTopic2, sContent) values (0, ‘News Main Topic-2′,’资讯内容-2′)”;
    由于sTopic2字段不存在,程序会报错终止。这时会发现没有记录被插入到表中,说明第1条插入SQL语句也没有生效,实际是被事务回滚了。
    怎么看出是“被事务回滚了”?因为open_article表的有个自动增量字段 nId。当重新纠正第2条插入SQL语句,再运行程序时,会发现 nId 的值跳了1,说明前次第1条插入SQL语句确实被执行了,然后又被取消了。

    结果记录:

    — —————————-

    — Records
    — —————————-
    INSERT INTO `open_article` VALUES (’1′, ‘0′, ‘News Main Topic-1′, ‘资讯内容-1′, ‘2010-03-06 05:59:07′);
    INSERT INTO `open_article` VALUES (’2′, ‘0′, ‘News Main Topic-2′, ‘资讯内容-2′, ‘2010-03-06 05:59:07′);
    INSERT INTO `open_article` VALUES (’3′, ‘0′, ‘News Main Topic-1′, ‘资讯内容-1′, ‘2010-03-06 06:00:13′);
    INSERT INTO `open_article` VALUES (’4′, ‘0′, ‘News Main Topic-2′, ‘资讯内容-2′, ‘2010-03-06 06:00:13′);
    INSERT INTO `open_article` VALUES (’6′, ‘0′, ‘News Main Topic-1′, ‘资讯内容-1′, ‘2010-03-06 06:06:13′);
    INSERT INTO `open_article` VALUES (’7′, ‘0′, ‘News Main Topic-2′, ‘资讯内容-2′, ‘2010-03-06 06:06:13′);
    INSERT INTO `open_article` VALUES (’8′, ‘0′, ‘News Main Topic-1′, ‘资讯内容-1′, ‘2010-03-06 06:11:46′);
    INSERT INTO `open_article` VALUES (’9′, ‘0′, ‘News Main Topic-2′, ‘资讯内容-2′, ‘2010-03-06 06:11:46′);

    注意上列记录中,缺少 nId = 5 的记录。

    测试代码需要保存成 utf8 格式。

本文转自网眼51CTO博客,原文链接:http://blog.51cto.com/itwatch/286458,如需转载请自行联系原作者

你可能感兴趣的文章
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>