PHP中执行MYSQL事务解决数据写入不完整等情况_php技巧

近来稍有时间研究了下MYSQL中的事务操作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时操作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的操作会导致初始化了一张表 ,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提示注册失败,但是用户已经注册了部分信息,这个时候需要程序员去数据库删除相应的数据是一个比较不好的事情。

因此这边考虑使用事务,事务可以进行模拟SQL操作,当所有的SQL都操作成功的时候才进行SQL操作,只要有一个操作失败就回滚当前事务的所有SQL操作,避免出现上面描述中出现的数据写入不完整等情况。

下面是鄙人写的一小段代码,欢迎大家参考和提出意见:

复制代码 代码如下:

/**
* @todo 多条sql的事务处理
* @param $sqls array
* @return boole true/false
*/
public function doArraySqlActionsTran($password,$sqls){
$db = $this -> doSqlLink($password);//打开数据库链接
$db -> autocommit(FALSE);//设置为不自动提交,因为MYSQL默认立即执行
//获取SQL执行结果数组
for ($i=0;$i<count($sqls);$i++){
$result[$i] = $db -> query($sqls[$i]);
}
//解析SQL执行结果数组
for ($j=0;$j<count($result);$j++){
if ($result[$j]==FALSE){
$result[$j]='false';
}else{
$result[$j]='true';
}
}
//查找SQL结果数组中是否存在false结果集
if (in_array('false',$result)){
$sqlResult=FALSE;
}else{
$sqlResult==TRUE;
}
//根据结果集进行数据库回滚或者执行操作
if ($sqlResult==FALSE){
$db -> rollback();//判断当执行失败时回滚
$return=FALSE;// 正式环境中使用
//$return='ROOLBACK';//test 标记使用
}else{
$db -> commit();//执行事务s
$return=TRUE;// 正式环境中使用
//$return='COMMIT';//test 标记使用
}
$db->autocommit(true); //设置为非自动提交——事务处理
$db->close();//关闭连接
return $return;
}

到此事务执行批量SQL操作基本完成,谢谢大家!

时间: 2024-11-22 18:39:01

PHP中执行MYSQL事务解决数据写入不完整等情况_php技巧的相关文章

PHP中执行MYSQL事务解决数据写入不完整等情况

 事务可以进行模拟SQL操作,当所有的SQL都操作成功的时候才进行SQL操作,只要有一个操作失败就回滚当前事务的所有SQL操作,避免出现上面描述中出现的数据写入不完整等情况 近来稍有时间研究了下MYSQL中的事务操作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时操作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的操作会导致初始化了一张表 ,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提

如何将一张数据库表中的某几列数据写入另一张表,同时再加上一列相同的数据。

问题描述 如何将一张数据库表中的某几列数据写入另一张表,同时再加上一列相同的数据.其实我就是想做一个一个订单编号对应多个商品的提交功能,请大家帮帮忙支支招,谢谢! 解决方案 解决方案二:根据要求写对应的updatesql解决方案三:引用1楼feiyun0112的回复: 根据要求写对应的updatesql 请问insertintot_wz_kc(wzid,jldwid,kcsl,yfpkcsl,cshwcbz)selectwzid,jldwid,0,0,'Y'fromt_wz_wzwhereyxb

php mysql-在php中从Excel表中向mysql数据库导入数据

问题描述 在php中从Excel表中向mysql数据库导入数据 请问:如何实现在php中从Excel表中向mysql数据库导入数据,要注意那些东西? 解决方案 http://www.jb51.net/article/26921.htm 解决方案二: http://blog.csdn.net/china_skag/article/details/7098473 解决方案三: http://blog.csdn.net/jiaocaigeng/article/details/9470571 解决方案四

PHP查询MySQL大量数据的时候内存占用分析_php技巧

昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用. 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? - 复制代码 代码如下: while ($row = mysql_fetch_assoc($result)) { // ... } 当然, 这种问题有许多优化的方法. 不过, 就这个问题来讲, 我首先想到, MySQL是经典的C/S(Client/Server, 客户端/服务器)

PHP 中的面向对象编程:通向大型 PHP 工程的办法_php技巧

这篇文章介绍在 PHP 的面向对象编程(OOP).我将演示如何用面向对象的概念编出较少的代码但更好的程序.祝大家好运.   面向对象编程的概念对每一个作者来说都有不同的看法,我提醒一下一个面向对象语言应有的东西:  - 数据抽象和信息隐藏  - 继承  - 多态性  在PHP中使用类进行封装的办法:  <?php  class Something {      // In OOP classes are usually named starting with a cap letter.     

PHP+mysql+ajax轻量级聊天室实现方法详解_php技巧

本文实例讲述了PHP+mysql+ajax轻量级聊天室实现方法.分享给大家供大家参考,具体如下: 做了一个QQ聊天交友网站,想加个聊天的功能,于是做完用PHP做了简单又强大的聊天室 1. 创建mysql数据库表: 复制代码 代码如下: create table chat( id bigint AUTO_INCREMENT,username varchar(20), chatdate datetime,msg varchar(500), primary key(id)); 2.编写建议连接数据库函

mysqli执行mysql事务的问题

  public static function exec_sql_tran($arr_sql){ $result=true; $con = new MySQLi(DBHOST,DB_USER,DB_PASSWD,DB_NAME); $con->autocommit(FALSE); foreach($arr_sql as $key=>$sql){ if (!$con->query($sql)) { echo $con->error." /"; $resulf=f

PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码_php技巧

创建文件我们用到函数 fopen ( string filename, string mode ) 参数filename为创建文件名 参数mode为以什么方式打开文件filename 其中mode可能值列表: mode 说明 'r' 只读方式打开,将文件指针指向文件头. 'r+' 读写方式打开,将文件指针指向文件头. 'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建之. 'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零.如果文件不存在则尝试创建

linux中关闭Mysql日志解决mysql-bin.0000*日志占用资源问题

今天看到一台安装LNMP环境的VPS下某个网站打不开,同时也出现数据库无法链接问题,通过df -l查看硬盘占用100%,看来是因为磁盘占用导致的.没有特殊情况下,默认安装的LNMP一键包环境是没有关闭MYSQL日志的,会导致生成mysql-bin.0000*日志文件,如果网站运行初期可能不会被发现问题,时间久了会占用硬盘. 第一.日志文件地址  代码如下 复制代码 /usr/local/mysql/var/ 在上面的文件夹中,有几M到几个G不等,我们也不要急于全部删除,可以选择几个大的删除就可以