




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 【数据库操作】 【连接数据库配置】2014年8月23日9:42 convertion.phpconfig.php1. 在config.php做数据库连接配置2. 制作model模型a. model本身就是一个类文件b. 数据库中的每个数据表都对应一个model模型文件c. 最简单的数据model模型类3. 字段缓存设置tp框架执行过程中会使用到数据表中的字段信息,通过sql语句可以查询”show colums from table” ,处于性能考虑,可以把字段缓存,避免每次重复执行sql语句。4. 可以根据情况对当前的model模型进行个性化设置对于一些特殊命名
2、的表(不都是相同的前缀的),以下两种方法都可以5. 在入口文件定义一个调试输出函数,便于系统开发使用 【实例化Model的三种方式】2014年8月24日10:14 1. $goods = new 命名空间GoodsModel(); (ModelGoodModel) 2. $goods = D(模型标志); a. $goods = D(“Goods”);b. 该$goods是父类Model(ThinkModel)的对象,但是操作的数据表还是sw_goodsc. $obj = D(); 实例化Model对象,没有具体操作数据表,与M()方法效果一致3. $
3、obj = M(); a. 实例化父类Modelb. 可以直接调用父类Model里边的属性,获得数据库相关操作c. 自定义model就是一个空壳,没有必要实例化自定义modeld. $obj = M(数据表标志); 实例化Model对象,实际操作具体的数据表$obj = D(标志);$obj = D();$obj = M(标志);$obj = M();D()和M()方法的区别:前者是tp3.1.3里边对new操作的简化方法;后者在使用就是实例化Model父类两者都在函数库文件定义ThinkPHP/Common/functions.php 注意:如果没有对应的model模型文件类,也可
4、以直接实例化model对象进行操作D()和M()方法都可以实例化操作一个没有具体model模型类文件的数据表。 【使用原生SQL】2014年8月25日17:57 TP的模型可以支持原生SQL操作,提供了query和execute两个方法,为什么原生SQL还要区分两个方法呢,原因有两个:1、返回类型不同query用于查询,返回的是数据集,和select或者findall一样,所以可以直接在模板里面使用volist标签输出query的查询结果execute用于写操作,返回的是状态或者影响的记录数2、读写统计需要为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是
5、query和execute)使用原生SQL很简单,我们甚至不需要实例化任何的模型,例如:$Model = new Model(); / 实例化一个空模型下面的方法是等效的$Model = D(); 或者 $Model = M();/ 下面执行原生SQL操作$Model->query('select * from think_user where status=1');$Model->execute('update think_user set status=1 where id=1'
6、;);如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:$User = D('User');$User->query('select * from think_user where status=1');$User->execute('update think_user set status=1 where id=1');在这种情况下面,我们可以简化SQL语句的写法,例如:$User->query('select * from _TABLE_ where status=1');$Use
7、r->execute('update _TABLE_ set status=1 where id=1');系统会自动把_TABLE_替换成当前模型对应的数据表名称,实际的数据表由模型决定。通常来说,我们都是使用原生SQL操作实现一些ORM和CURD比较难实现的操作,另外,如果SQL不复杂的话 原生SQL的效率和连贯操作的效率差别是微乎其微的,TP本身的ORM实现也是相当高效的。 【数据查询】2014年8月24日10:14 select()是数据模型的一个指定方法,可以获得数据表的数据信息返回一个二维数组信息,当前数据表的全部数据信
8、息1. 配置smartya. 配置变量信息 i. convertion.phpii. Behavior行为配置变量信息(页面底部日志显示配置、smarty配置)iii. 系统程序里边有一些零散的配置信息 b. 在config.php里边配置smarty使用设置模板引擎配置参数位置(不能直接修改,在config.php里边重写):2. 具体使用(从tp引擎变为smarty引擎)a. css样式如果有,需要使用literal标签禁止smarty解析b. 关键字$Think 变为 $smartyc. tp引擎会对关键常量进行替换例如:_CONTROLLER_ _MODULE_smarty引擎不给替换
9、,需要设置为:$smarty.const._CONTROLLER_ 【各种查询条件设置】2014年8月24日10:14 $obj = D(); 创建对象$obj -> select(); 查询数据 select 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条数; SELECT%DISTINCT%FIELD%FROM %TABLE%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT% %UNION%COMMENT% $obj ->
10、 field(字段,字段); 查询指定字段$obj -> table(数据表); 设置具体操作数据表$obj -> where(参数); 参数就是正常sql语句where后边的条件信息例如:( “goods_price >100 and goods_name like 三%”)$obj -> group(字段); 根据字段进行分组查询$obj -> having(参数条件); having 条件设置$obj -> order(price desc/asc) 排序查询$obj -> limit(偏移量,条数) 限制查询的条数 sql语句里边具体
11、的条件设置在tp框架model模型里边体现为具体的方法操作 以上方法理论上是父类Model的对应方法父类model具体存在方法: field() where() limit()还有一些方法在_call()自动调用函数里边: table() group() order() having()在_call()魔术方法里边会判断当前的执行方法是否是一个method属性的元素信息,如果存在就会执行执行 以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)$obj -> limit(5)->field(id,name)->order(price asc) -&g
12、t; table(sw_goods)->select();以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model属性options里边,最后根据options拼装sql语句。 【查询数据信息】2014年8月25日17:58 $info = $goods -> where()->field(字段)->select();select()方法1. 返回一个二维数组信息2. 返回全部数据表信息3. 给该方法传递参数 1. select(30) 查询主键值等于30的记录信息2. select(“10,12,14”) 查询主键值
13、在10、12、14范围的记录信息goods_id in("10","12","14")1. find()如果我们查询的结果只有一个信息(一维数组),使用select()会返回一个二维数组为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法2. having()方法设置查询条件,where()设置查询条件having 和 where区别1. 使用有先后顺序2. where price>100 having price>1003. where 设置条件,字段必须是数据表中存在的字段 4. having 设置条件
14、,字段必须是select语句查询出来的字段可以使用6. 相关聚合函数 count() sum() avg() max() min()以上聚合函数是最后被调用的方法以上方法可以结合具体条件方法使用例如:$goods -> where(goods_price >1000)->count(); 大于1000元的商品的总数目 【实现数据添加add】2014年8月25日17:57 select()add() 该方法返回被添加的新记录的主键id值save()delete()两种方式实现数据添加1. 数组方式数据添加$goods = D(“Goods”);$arr =
15、array(goods_name=>iphone5s,goods_weight=>109);/注意:goods_name和goods_weight是数据表中字段名称$goods -> add($arr);2. AR方式实现数据添加a. ActiveRecord 活跃记录b. AR规定了程序与数据库之间的关系c. 什么是AR:d. 一个数据表对应一个类modele. 一条数据记录对应类的一个对象f. 每个字段对应该对象的具体属性g. tp框架的AR是假的$goods = D(“Goods”);$goods -> goods_name = “htc_one”;$goods
16、-> goods_price = 3000;$goods -> add();以上两种方式:数组、AR,最后add都要把新记录的主键id值返回 【收集表单数据入库操作】2014年8月25日17:57 1. 制作一个表单2. 通过$_POST收集信息3. 通过create()方法实现数据收集,该方法对于非法的字段会自动进行过滤4. 在create()收集表单方法内部会自动过滤非法的字段信息 【数据修改操作】2014年8月25日17:57 select()add()save() 实现数据修改,返回受影响的记录条数delete
17、()具体有两种方式实现数据修改,与添加类似(数组、AR方式)1. 数组方式a. $goods = D(“Goods”);b. $ar = array(goods_id=>100,goods_name=>lenovo手机,goods_price=>1200);c. $goods ->where(goods_id>50)-> save($ar);2. AR方式a. $goods = D(“Goods”);b. $goods -> goods_id = 53;c. $goods -> goods_name = “三星手机”;d. $goods ->
18、; goods_price = 2000;e. $goods -> where(goods_price>10000)->save();以上两种方式如果可行,即要修改全部数据以上sql语句从技术上可行,从业务上不可行(事故)tp框架有智能考虑,以上情况的sql语句不被允许执行。如何执行:1. 明确告诉系统那条sql语句被update更新2. 可以设置where进行sql语句更新操作 save() 方法返回值0:之前没有问题,执行前后数据没有变化自然数:受影响的记录条数false:执行失败 【数据删除及执行原生sql语句】2
19、014年8月25日17:58 select()add()save() delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息$goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录$goods -> where(“goods_id>60”)->delete() 把符合条件的记录都给删除 一般是在表中增加delete字段,删除标志 执行原生sql语句1. 查询语句query() 返回一个二维数组信息2. 添加、修改
20、、删除 execute() 返回受影响的记录条数$goods = D(“Goods”);$sql = “select * from sw_goods”;$rst = $goods -> query($sql); $sql = “select goods_category_id,avg(goods_price) from sw_goods group by goods_category_id having avg(goods_price)>1000”;$goods -> query($sql); $sql = “update sw_goods set goo
21、ds_name = htc_two where goods_id=100”;$goods -> execute($sql); 返回false则没有正确执行 【数据修改具体实现】2014年8月25日17:58 通过路由给一个操作方法传递参数http:/网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值 以上路由是通过get形式给指定的操作传递了三个参数信息原则三个参数信息接收的时候通过$_GET接收即可例如:$_GET变量名1; include() 以上参数信息接收太直白,不安全,需要按照框架规则
22、使用下边的方式接收get参数信息http:/网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijingfunction upd($name,$age,$addr)$name;$age;$addr;以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。(除非参数有默认值) 修改商品信息步骤:1. 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作2. 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id3. 在修改表单里边制作隐藏域goods_id,避免t
23、p框架禁止修改语句执行4. 在upd操作方法内部有两个逻辑:展现表单、收集表单 【表单验证】2014年8月25日17:58 javascriptjquery 在服务器端通过tp框架实现表单验证用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历具体步骤:1. 制作表单2. 表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据)3. 自定义数据model模型类实现具体验证规则(自动验证) 4. $_validate属性定义时一个数组信息,内部每个小的单元还是一个数组5. array(字段,验证规则,错误提
24、示,验证条件,附加规则,验证时间)6. 验证规则:require、email7. 验证条件:i. 0 字段在$_POST里边存在就验证 ii. 1 必须验证iii. 2 值不为空才验证f) 附加规则:regex in callback 【用户注册完善】implode()把数组元素用逗号给合并起来代码部分: 【create】2014年8月25日17:58 对收集的数据进行验证和过滤 验证则是重写 protected $_validate=array()定义规则过滤则是讲不是数据库中的该表字段进行过滤public fun
25、ction register() $user=new ModelUserModel(); /$user=D('User'); /判断表单是否提交 if(!empty($_POST) if(!$val=$user->create() /验证失败 /echo "验证失败" /返回错误信息 /p($user->getError(); $this->error('注册失败',U('User/register'); else /create是将收集到的数据转变为数据库属性 /爱好是数组,变为字符串存入数据库 /使用AR
26、方式时可以直接使用add $user->user_hobby=implode(',',$_POST'user_hobby'); $res=$user->add(); if($res) /echo "success" $this->success('注册成功',U('Index/index'); else /echo "failure" $this->error('注册失败',U('User/register'); else$this-&
27、gt;display(); 【数据库总结】2014年8月25日17:58 1. 3种实例化model模型方法a) new 命名空间GoodsModel();b) D(“模型标志Goods”) (之前版本会实例化自定义model对象,目前都实例化Model基类对象)i.
28、160; 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作goods数据表c) M(“模型标志Goods”)i. 没有参数实例化一个Model对象、有参数也实例化一个Model对象操作goods数据表2. 数据库查询及连贯操作
29、查询a) select()b) select(10) 主键值等于10的记录c) select(“20,21,22”) 主键值 in 20,21,22 的三条记录d) find(4) 主键值等于4的记录e)
30、0; select()方法返回二维数组,find方法返回一维数组f) 连贯操作查询方法:g) field() where() limit() 父类Model已经定义好的方法h) table() group() order() group() hav
31、ing() 统一在魔术方法_call()里边声明i) 以上方法可以连续操作执行,使用没有顺序要求j) $obj -> limit(5)->where(price>100)->order(id desc)->select();3. 聚合函数使用a)
32、60; count() sum() max() min() avg()b) 以上方法也是在Model的魔术方法_call()里边定义4. 添加数据记录add()a) 两种方式:数组、AR操作5.
33、60; 修改数据信息savea) 两种方式:数组、AR操作b) 注意:为了修改成功必须有两个条件之一被设置i. 信息里边有主键值id值被修改ii. 可以通过where设置具体哪些记录被修改6. 删除数据deletea) $goods -> delete(10) 主键值等于10的记录信息b)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语六年级单元考点系统训练
- 酒店餐饮安全卫生操作规范
- 初中美术中国画基础知识测试卷
- 客户技术支持与售后服务流程建立
- 英语八级听力与写作模拟题库
- 质检关键点W、H、R、S详细解读
- 电线接线器使用说明及安装规范
- 民宿行业运营管理实务方案
- 初中生物实验教学方案与安全指导
- 小学三年级古文100首基础教学
- 餐厅前厅奖罚管理制度
- 第三期团课课件乡村振兴中的青春力量-学习2025中央一号文件“千万工程”新阶段部署
- 大学英语四级考试2024年12月真题(第一套)Part IV Translation
- 创伤止血包扎培训课件
- 疥疮的预防及护理
- 高三英语人教版一轮复习复习课应用文写作信课时2教学设计
- 胎儿宫内生长发育监测-洞察分析
- 《个案工作》(第2版)笔记和课后习题详解
- 《生产者责任延伸制》课件
- 特殊教育教师聘用协议样本
- 食品安全知识培训
评论
0/150
提交评论