ThinkPHP 处理商品添加的时候操作多张表 用事务解决。

 #重新父类的add方法
    public function add(){
    	#同时操作多装表,可以考虑用事务来做,要同时插入数据成功要么都不插输入数据。
    	#开启事务的前提是表的引擎必须是InnoDB

    	 #开启事务
    	 //mysql_query("STRAT TRANSACTION");

         #--------------(1)插入商品的基本信息------------
    	 #判断是否插件成功
    	 if(($goods_id=parent::add())===FALSE){
    	 	return FALSE;
    	 }
    	 #--------------(2)插入会员价格------------
    	 #判断是否有POST数据提交过来
    	 if(isset($_POST[‘Ml‘])){
    	 	#实例化会员价格模型
    	 	$Mb_Price=M(‘MemberPrice‘);
    	 	#循环post提交过来的数据
    	 	foreach ($_POST[‘Ml‘] as $k=>$v){
    	 	    #插入数据
    	 	    $is_ok=$Mb_Price->data(array(
                    ‘goods_id‘=>$goods_id,
	    				‘level_id‘=>$k,
					‘price‘=>$v,
				))->add();

			    /*
				if($is_ok===FALSE){
					mysql_query("ROLLBACK");
					return FALSE;
				}
				*/
    	 	}

    	 }
    	 #--------------(3)插入商品属性-----------
    	 #判断POST提交过来是否有数据
    	 if(isset($_POST[‘GoodsAttr‘])){
    	 	#创建一个属性模型
    	 	$good_attr=M(‘GoodsAttr‘);
    	 	#循环读取post提交过来的数据
    	 	foreach($_POST[‘GoodsAttr‘] as $k=>$v){
    	 		#在判断属性提交过来的是否是一个数组    如:颜色  有 白色  黑色  金黄 ....
    	 		if(is_array($v)){
    	 			#在循环这个属性的数组
    	 			foreach ($v as $k1=>$v1){
    	 			  #在循环插件数据、
    	 			  $is_ok=$good_attr->data(array(
                            ‘goods_id‘=>$goods_id,
							‘attr_id‘=>$k,
							‘attr_value‘=>$v1,
    	 			  ))->add();
	    	 		  /*
					   if($is_ok===FALSE){
						  mysql_query("ROLLBACK");
						  return FALSE;
					   }
					  */
    	 			}
    	 		}else{
    	 		  #说明是单个值
    	 		  $is_ok=$good_attr->data(array(
                     ‘goods_id‘=>$goods_id,
					 ‘attr_id‘=>$k,
					 ‘attr_value‘=>$v,
    	 		 ))->add();
    	 	    /*
				  if($is_ok===FALSE){
					  mysql_query("ROLLBACK");
					  return FALSE;
				  }
				*/
    	 		}
    	 	}
    	 }
    }

  

时间: 2024-08-13 02:54:13

ThinkPHP 处理商品添加的时候操作多张表 用事务解决。的相关文章

解决erlang和java同时操作一张表,造成锁表问题

作者:张昌昌 1.问题描述 Erlang端通过odbc去写oracle一张表,同时java通过jdbc驱动也去写这张表,当同时多次发生这种写操作时,这个表就被锁. 2.问题解决 思路:利用适配器原理,适配erlang和java的数据库连接,让erlang端对数据表的操作与java端对该数据表的操作,分时序顺序进行,其中一端在进行写操作时上锁 另一端就不能操作,直到他操作完成释放锁,另一端才能操作. 该适配器采用java编写,通过otp.jar让erlang与java进行通信,erlang和jav

(10)MySQL触发器(同时操作两张表)

什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志表],当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息.当然触发器并不是只能进行插入操作,还能执行修改,删除 触发器的事

ThinkPHP教程_PHP框架之ThinkPHP(八)【CRUD与连贯操作】

一.CRUD ThinkPHP提供了灵活和方便的数据库操作方法,其中最基本的就是CRUD四个操作,只有掌握了最基本的CRUD操作,才能更好的运用更多实用的数据库操作方法 CRUD操作通常与连贯操作配合 1.创建操作 使用add()方法或addAll()方法 ·add()方法 可以直接传入要插入的数据,而且会在插入之前会过滤掉数据表中不存在的字段以及非法的数据类型(例如对象.数组等非标量数据).若当前表有主键自动增长并且插入记录成功的话,则返回所插入记录主键值 如果在执行add()操作之前已经创建

PHP.TP框架下商品项目的优化4-优化商品添加表单js

优化商品添加表单js 思路 1.制作五个按钮 2.下面五个table 3.全部隐藏,点击则显示 4.点击第几个按钮就显示第几个table 具体操作 1.添加按钮 2.添加五个table并添加class隐藏后面四个 style="display:none" ->隐藏 class="tab_table" ->样式名,方便js操作 3.添加JS代码绑定点击事件[add.html的最下面] /******切换代码******/ $("#tabbar-d

把商品添加到购物车的动画效果(贝塞尔曲线)

如图: 参考: Android补间动画,属性动画实现购物车添加动画 思路: 确定动画的起终点 在起终点之间使用二次贝塞尔曲线填充起终点之间的点的轨迹 设置属性动画,ValueAnimator插值器,获取中间点的坐标 将执行动画的控件的x.y坐标设为上面得到的中间点坐标 开启属性动画 当动画结束时的操作 难点: PathMeasure的使用 - getLength() - boolean getPosTan(float distance, float[] pos, float[] tan) 的理解

shop--10.商品--商品添加(后端)

商品添加dao层 1 /** 2 * 插入商品 3 * 4 * @param product 5 * @return 6 */ 7 int insertProduct(Product product); 商品添加映射文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "

Vue电商后台管理系统项目第6篇-商品管理的商品列表和商品添加组件实现

开胃小菜—左侧导航菜单的动态生成 通过为指定的用户指定角色,那么这个用户登陆之后应该只能看到这个角色所对应的权限菜单, 我们是根据当前登陆用户去获取对应的菜单权限 步骤 分析接口文档 ,发现不用传递参数,因为它是根据当前登陆用户的token来动态获取当前用户的权限 添加接口方法获取动态的菜单数据 // 获取左侧菜单权限 export const getLeftMenu = () => { return axios({ url: `menus` }) } 实现菜单项的动态加载 获取数据之后,注意看

vue登录功能和将商品添加至购物车实现

 2.1: 学子商城--用户登录 用户登录商城用户操作行为,操作用户输入用户名和密码 点击登录按钮,一种情况登录成功 一种情况登录失败 "用户名或密码有误请检查" 2.2:如何实现用户登录 (1)数据库 xz_login 用户登录表[id;uname;upwd] id INT uname VARCHAR(25) upwd  VARCHAR(32) 加密处理 xz_login 1  tom     123 2  jerry     123 知识扩展:加密通过复杂算法将明文加密转换密文保存

模仿文件存储方式,来进行添加、修改、添加子类的操作。

结合Mysql和Php完成的一个简单实例. 过程如下: ①.先连接数据库,因为在多个页面都会使用同一个连接,所以可以将连接数据库的过程封装成函数,方便各个页面调用(include '').代码格式如下: function getConnect() { $host = 'localhost'; $pwd = 'root'; $username = 'root'; $dbname = 'operation'; $conn = new mysqli($host, $username, $pwd, $d