2022年tp数据库操作 .pdf

上传人:C****o 文档编号:39709269 上传时间:2022-09-07 格式:PDF 页数:13 大小:189.70KB
返回 下载 相关 举报
2022年tp数据库操作 .pdf_第1页
第1页 / 共13页
2022年tp数据库操作 .pdf_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《2022年tp数据库操作 .pdf》由会员分享,可在线阅读,更多相关《2022年tp数据库操作 .pdf(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、【数据库操作】【连接数据库配置】2014 年 8 月 23 日9:42 convertion.php config.php 1.在 config.php 做数据库连接配置2.制作 model 模型a.model 本身就是一个类文件b.数据库中的每个数据表都对应一个model 模型文件c.最简单的数据model 模型类3.字段缓存设置tp 框架执行过程中会使用到数据表中的字段信息,通过sql 语句可以查询”show colums from table”,处于性能考虑,可以把字段缓存,避免每次重复执行sql语句。4.可以根据情况对当前的model模型进行个性化设置对于一些特殊命名的表(不都是相同的

2、前缀的),以下两种方法都可以名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 13 页 -5.在入口文件定义一个调试输出函数,便于系统开发使用【实例化 Model 的三种方式】2014 年 8 月 24 日10:14 1.$goods=new 命名空间GoodsModel();(ModelGoodModel)2.$goods=D(模型标志);a.$goods=D(“Goods”);b.该$goods是 父类 Model(ThinkModel)的对象,但是操作的数据表还是sw_goods c.$obj=D();实例化 Model 对象,没有具体操作数据表,与M()方法效果一致3.$o

3、bj=M();a.实例化父类Model b.可以直接调用父类Model 里边的属性,获得数据库相关操作c.自定义 model 就是一个空壳,没有必要实例化自定义model d.$obj=M(数据表标志);实例化 Model 对象,实际操作具体的数据表$obj=D(标志);$obj=D();$obj=M(标志);$obj=M();D()和 M()方法的区别:前者是 tp3.1.3 里边对 new操作的简化方法;后者在使用就是实例化Model 父类两者都在函数库文件定义ThinkPHP/Common/functions.php名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 13 页

4、-注意:如果没有对应的model 模型文件类,也可以直接实例化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);如果你实例化了某个模型,仍然可以执行原生SQL操作,不受影响,例如:$Us

6、er=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);$User-execute(update _TABLE_ set status=1 where id=1);系统会自动把 _TABLE_ 替换成当前模型对应的数据表名称,实际的数据表由模型决定。名师资料总结-精品

7、资料欢迎下载-名师精心整理-第 3 页,共 13 页 -通常来说,我们都是使用原生SQL 操作实现一些ORM 和 CURD 比较难实现的操作,另外,如果 SQL不复杂的话原生 SQL的效率和连贯操作的效率差别是微乎其微的,TP 本身的ORM 实现也是相当高效的。【数据查询】2014 年 8 月 24 日10:14 select()是数据模型的一个指定方法,可以获得数据表的数据信息返回一个二维数组信息,当前数据表的全部数据信息1.配置 smarty a.配置变量信息i.convertion.php ii.Behavior 行为配置变量信息(页面底部日志显示配置、smarty配置)iii.系统程序

8、里边有一些零散的配置信息b.在 config.php 里边配置smarty 使用设置模板引擎配置参数位置(不能直接修改,在config.php 里边重写):2.具体使用(从 tp 引擎变为 smarty 引擎)a.css样式如果有,需要使用 literal 标签禁止 smarty 解析b.关键字$Think 变为$smarty c.tp 引擎会对关键常量进行替换例如:_CONTROLLER_ _MODULE_ smarty 引擎不给替换,需要设置为:$smarty.const._CONTROLLER_【各种查询条件设置】2014 年 8 月 24 日10:14$obj=D();创建对象$obj

9、-select();查询数据select 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条数;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 13 页 -SELECT%DISTINCT%FIELD%FROM%TABLE%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT%UNION%COMMENT%$obj-field(字段,字段);查询指定字段$obj-table(数据表);设置具体操作数据表$obj-where(参数);参数就是正常sql 语句 where 后边的条件信息例如:(“go

10、ods_price 100 and goods_name like,三%”)$obj-group(字段);根据字段进行分组查询$obj-having(参数条件);having 条件设置$obj-order(,price desc/asc?)排序查询$obj-limit(偏移量,条数)限制查询的条数sql 语句里边具体的条件设置在tp 框架 model 模型里边体现为具体的方法操作以上方法理论上是父类Model 的对应方法父类 model 具体存在方法:field()where()limit()还有一些方法在_call()自动调用函数里边:table()group()order()having(

11、)在_call()魔术方法里边会判断当前的执行方法是否是一个method 属性的元素信息,如果存在就会执行执行以上多个方法是同时使用多个进行条件显示(并且没有顺序要求)$obj-limit(5)-field(,id,name?)-order(,price asc?)-table(,sw_goods?)-select();以上许多方法执行没有顺序要求,许多方法执行后都是把具体的参数赋予到model 属性options 里边,最后根据 options 拼装 sql语句。【查询数据信息】2014 年 8 月 25 日17:58$info=$goods-where()-field(字段)-select

12、();select()方法1.返回一个二维数组信息2.返回全部数据表信息3.给该方法传递参数1.select(30)查询主键值等于30 的记录信息2.select(“10,12,14”)查询 主键值 在 10、12、14 范围的记录信息goods_id in(10,12,14)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 13 页 -1.find()如果我们查询的结果只有一个信息(一维数组),使用 select()会返回一个二维数组为了使用方便我们会希望返回一个一维数组,这时候可使用find()方法2.having()方法设置查询条件,where()设置查询条件having 和

13、 where 区别1.使用有先后顺序2.where price100 having price1003.where 设置条件,字段必须是数据表中存在的字段4.having 设置条件,字段必须是select语句查询出来的字段可以使用6.相关聚合函数 count()sum()avg()max()min()以上聚合函数是最后被调用的方法以上方法可以结合具体条件方法使用例如:$goods-where(,goods_price 1000?)-count();大于 1000元的商品的总数目【实现数据添加add】2014 年 8 月 25 日17:57 select()add()该方法返回被添加的新记录的主

14、键id 值save()delete()两种方式实现数据添加1.数组方式数据添加$goods=D(“Goods”);$arr=array(goods_name=?iphone5s?,?goods_weight?=?109?);/注意:goods_name和 goods_weight 是数据表中字段名称$goods-add($arr);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 13 页 -2.AR 方式实现数据添加a.ActiveRecord 活跃记录b.AR 规定了程序与数据库之间的关系c.什么是 AR:d.一个 数据表 对应一个类modele.一条数据 记录 对应类的一个

15、对象f.每个 字段 对应该对象的具体属性g.tp 框架的 AR 是假的$goods=D(“Goods”);$goods-goods_name=“htc_one”;$goods-goods_price=3000;$goods-add();以上两种方式:数组、AR,最后 add 都要把新记录的主键id 值返回【收集表单数据入库操作】2014 年 8 月 25 日17:57 1.制作一个表单2.通过$_POST 收集信息3.通过 create()方法实现数据收集,该方法对于非法的字段会自动进行过滤名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 13 页 -4.在 create()收集表

16、单方法内部会自动过滤非法的字段信息【数据修改操作】2014 年 8 月 25 日17:57 select()add()save()实现数据修改,返回受影响的记录条数delete()具体有两种方式实现数据修改,与添加类似(数组、AR 方式)1.数组方式a.$goods=D(“Goods”);b.$ar=array(,goods_id?=100,goods_name?=?lenovo手机,goods_price=1200);c.$goods-where(,goods_id50?)-save($ar);2.AR 方式a.$goods=D(“Goods”);b.$goods-goods_id=53;c

17、.$goods-goods_name=“三星手机”;d.$goods-goods_price=2000;e.$goods-where(,goods_price10000?)-save();以上两种方式如果可行,即要修改全部数据以上 sql语句从技术上可行,从业务上不可行(事故)tp 框架有智能考虑,以上情况的sql语句不被允许执行。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 13 页 -如何执行:1.明确告诉系统那条sql 语句被 update更新2.可以设置where 进行 sql语句更新操作save()方法返回值0:之前没有问题,执行前后数据没有变化自然数:受影响的记录条

18、数false:执行失败【数据删除及执行原生sql语句】2014 年 8 月 25 日17:58 select()add()save()delete()返回受影响的记录条数$goods-delete(30);删除主键值等于30 的记录信息$goods-delete(“10,12,13”);删除主键值等于10 12 13 的三条记录$goods-where(“goods_id60”)-delete()把符合条件的记录都给删除一般是在表中增加delete 字段,删除标志执行原生 sql语句1.查询语句query()返回一个二维数组信息2.添加、修改、删除 execute()返回受影响的记录条数$go

19、ods=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);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 13 页 -$sql=“update sw_goods set goods_name=,htc_two?where goods_id

20、=100”;$goods-execute($sql);返回 false则没有正确执行【数据修改具体实现】2014 年 8 月 25 日17:58 通过路由给一个操作方法传递参数http:/网址/index.php/模块/控制器/方法 upd/变量名 1/值/变量名 2/值/变量名 3/值以上路由是通过get 形式给指定的操作传递了三个参数信息原则三个参数信息接收的时候通过$_GET 接收即可例如:$_GET 变量名1;include()以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get 参数信息http:/网址/index.php/Admin/Goods/upd/name

21、/tom/age/25/addr/beijingfunction upd($name,$age,$addr)$name;$age;$addr;以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。(除非参数有默认值)修改商品信息步骤:1.在“修改”按钮处把被修改商品id 信息通过get 形式传递给upd操作2.在 upd 方法里边制作形式参数$goods_id,接收服务器给传递的get 变量 goods_id 3.在修改表单里边制作隐藏域 goods_id,避免 tp 框架禁止修改语句执行4.在 upd 操作方法内部有两个逻辑:展现表单、收集表单【表单验证】2014 年 8

22、 月 25 日17:58 javascript jquery 在服务器端通过tp 框架实现表单验证用户名、密码、重复密码、邮箱、qq、手机号码、爱好、学历具体步骤:1.制作表单2.表单form数据通过create()方法收集(验证功能要求我们必须通过create()方法收集数据)3.自定义数据model 模型类实现具体验证规则(自动验证)4.$_validate 属性定义时一个数组信息,内部每个小的单元还是一个数组5.array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)6.验证规则:require、email 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 13

23、 页 -7.验证条件:i.0 字段在$_POST 里边存在就验证ii.1 必须验证iii.2 值不为空才验证f)附加规则:regex in callback 【用户注册完善】implode()把数组元素用逗号给合并起来代码部分:【create】2014 年 8 月 25 日17:58 对收集的数据进行验证和过滤验证则是重写 protected$_validate=array()定义规则过滤则是讲不是数据库中的该表字段进行过滤public function register()$user=new ModelUserModel();/$user=D(User);名师资料总结-精品资料欢迎下载-名师

24、精心整理-第 11 页,共 13 页 -/判断表单是否提交 if(!empty($_POST)if(!$val=$user-create()/验证失败 /echo 验证失败;/返回错误信息 /p($user-getError();$this-error(注册失败,U(User/register);else /create 是将收集到的数据转变为数据库属性 /爱好是数组,变为字符串存入数据库 /使用 AR 方式时可以直接使用add$user-user_hobby=implode(,$_POSTuser_hobby);$res=$user-add();if($res)/echo success;$

25、this-success(注册成功,U(Index/index);else /echo failure;$this-error(注册失败,U(User/register);else$this-display();【数据库总结】2014 年 8 月 25 日17:58 1.3种实例化model 模型方法a)new 命名空间GoodsModel();b)D(*“模型标志 Goods”+)(之前版本会实例化自定义model 对象,目前都实例化Model基类对象)i.没有参数实例化一个Model 对象、有参数也实例化一个Model 对象操作goods 数据表c)M(*“模型标志 Goods”+)i.没

26、有参数实例化一个Model 对象、有参数也实例化一个Model 对象操作goods 数据表2.数据库查询及连贯操作查询a)select()b)select(10)主键值等于10 的记录c)select(“20,21,22”)主键值 in 20,21,22 的三条记录d)find(4)主键值等于4 的记录e)select()方法返回二维数组,find 方法返回一维数组f)连贯操作查询方法:g)field()where()limit()父类 Model 已经定义好的方法h)table()group()order()group()having()统一在魔术方法_call()里边声明i)以上方法可以连

27、续操作执行,使用没有顺序要求j)$obj-limit(5)-where(price100)-order(id desc)-select();3.聚合函数使用a)count()sum()max()min()avg()名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 13 页 -b)以上方法也是在Model 的魔术方法 _call()里边定义4.添加数据记录add()a)两种方式:数组、AR 操作5.修改数据信息save a)两种方式:数组、AR 操作b)注意:为了修改成功必须有两个条件之一被设置i.信息里边有主键值id 值被修改ii.可以通过where 设置具体哪些记录被修改6.删

28、除数据delete a)$goods-delete(10)主键值等于10 的记录信息b)$goods-delete(“10,12,13”)删除三条记录主键值 in 10,12,13 c)$goods-where(id100)-delete()id100 的记录都被删除7.原生 sql语句执行a)query()执行查询语句,返回二维数组信息b)execute()执行增加、修改、删除,返回受影响的记录数目,返回false 表示 sql 语句有错误,返回0 表示 sql 语句执行前后对数据没有改变8.表单验证a)在自定义模型里边重写$_validate b)$_validate 属性定义时一个数组信息,内部每个小的单元还是一个数组c)array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)d)验证规则:require、email e)验证条件:i.0 字段在$_POST里边存在就验证ii.1 必须验证iii.2 值不为空才验证f)附加规则:regex in callback 名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 13 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com