《tp数据库操作》由会员分享,可在线阅读,更多相关《tp数据库操作(13页珍藏版)》请在金锄头文库上搜索。
1、 【数据库操作数据库操作】【连接数据库配置连接数据库配置】2014 年 8 月 23 日 9:42convertion.php config.php 1.在 config.php 做数据库连接配置2.制作 model 模型 a.model 本身就是一个类文件 b.数据库中的每个数据表都对应一个 model 模型文件 c.最简单的数据 model 模型类3.字段缓存设置 tp 框架执行过程中会使用到数据表中的字段信息,通过 sql 语句可以查询”show colums from table” ,处于性能考虑,可以把字段缓存,避免每次重复执行 sql 语句。4.可以根据情况对当前的可以根据情况对当
2、前的 model 模型进行个性化设置模型进行个性化设置 对于一些特殊命名的表(不都是相同的前缀的),以下两种方法都可以对于一些特殊命名的表(不都是相同的前缀的),以下两种方法都可以5.在入口文件定义一个调试输出函数,便于系统开发使用【实例化实例化 Model 的三种方式的三种方式】2014 年 8 月 24 日 10:141.$goods = new 命名空间 GoodsModel(); (ModelGoodModel)2.$goods = D(模型标志); a.$goods = D(“Goods”); b.该$goods 是父类 Model(ThinkModel)的对象,但是操作的数据表还是
3、 sw_goods c.$obj = D(); 实例化 Model 对象,没有具体操作数据表,与 M()方法效果一致 3.$obj = M(); a.实例化父类 Model b.可以直接调用父类 Model 里边的属性,获得数据库相关操作 c.自定义 model 就是一个空壳,没有必要实例化自定义 model d.$obj = M(数据表标志数据表标志); 实例化实例化 Model 对象,实际操作具体的数据表对象,实际操作具体的数据表 $obj = D(标志); $obj = D(); $obj = M(标志); $obj = M(); D()和 M()方法的区别: 前者是前者是 tp3.1.
4、3 里边对里边对 new 操作的简化方法操作的简化方法; 后者在使用就是实例化 Model 父类 两者都在函数库文件定义 ThinkPHP/Common/functions.php注意:如果没有对应的 model 模型文件类,也可以直接实例化 model 对象进行操作 D()和 M()方法都可以实例化操作一个没有具体 model 模型类文件的数据表。【使用原生使用原生 SQL】2014 年 8 月 25 日 17:57TP 的模型可以支持原生 SQL 操作,提供了 query 和 execute 两个方法,为什么原生 SQL还要区分两个方法呢,原因有两个:1、返回类型不同query 用于查询,
5、返回的是数据集,和 select 或者 findall 一样,所以可以直接在模板里面使用 volist 标签输出 query 的查询结果execute 用于写操作,返回的是状态或者影响的记录数2、读写统计需要为了便于统计当前的数据读写次数,把数据库的读和写操作分开(对应的就是 query 和execute)使用原生 SQL 很简单,我们甚至不需要实例化任何的模型,例如:$Model = new Model(); / 实例化一个空模型下面的方法是等效的$Model = D(); 或者 $Model = M();/ 下面执行原生 SQL 操作$Model-query(select * from t
6、hink_user where status=1);$Model-execute(update think_user set status=1 where id=1);如果你实例化了某个模型,仍然可以执行原生 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
7、_TABLE_ where status=1);$User-execute(update _TABLE_ set status=1 where id=1);系统会自动把_TABLE_替换成当前模型对应的数据表名称,实际的数据表由模型决定。通常来说,我们都是使用原生 SQL 操作实现一些 ORM 和 CURD 比较难实现的操作,另外,如果 SQL 不复杂的话 原生 SQL 的效率和连贯操作的效率差别是微乎其微的,TP 本身的ORM 实现也是相当高效的。【数据查询数据查询】2014 年 8 月 24 日 10:14select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组
8、信息,当前数据表的全部数据信息 1.配置 smarty a.配置变量信息 i.convertion.php ii.Behavior 行为配置变量信息(页面底部日志显示配置、smarty 配置) iii.系统程序里边有一些零散的配置信息 b.在 config.php 里边配置 smarty 使用设置模板引擎配置参数位置(不能直接修改,在 config.php 里边重写):2.具体使用具体使用(从从 tp 引擎变为引擎变为 smarty 引擎引擎) a.css 样式如果有样式如果有,需要使用,需要使用literal标签禁止标签禁止 smarty 解析解析 b.关键字关键字$Think 变为变为 $
9、smarty c.tp 引擎会对关键常量进行替换例如引擎会对关键常量进行替换例如:_CONTROLLER_ _MODULE_ smarty 引擎不给替换引擎不给替换,需要设置为:需要设置为:$smarty.const._CONTROLLER_【各种查询条件设置各种查询条件设置】2014 年 8 月 24 日 10:14$obj = D(); 创建对象 $obj - select(); 查询数据select 字段,字段 from 表名 where 条件 group 字段 having 条件 order 排序 limit 限制条 数;SELECT%DISTINCT%FIELD%FROM %TABL
10、E%JOIN%WHERE%GROUP%HAVING%ORDER%LIMIT% %UNION%COMMENT%$obj - field(字段,字段); 查询指定字段 $obj - table(数据表); 设置具体操作数据表 $obj - where(参数); 参数就是正常 sql 语句 where 后边的条件信息 例如:( “goods_price 100 and goods_name like 三%”) $obj - group(字段); 根据字段进行分组查询 $obj - having(参数条件); having 条件设置 $obj - order(price desc/asc) 排序查询
11、$obj - limit(偏移量,条数) 限制查询的条数sql 语句里边具体的条件设置在 tp 框架 model 模型里边体现为具体的方法操作以上方法理论上是父类 Model 的对应方法 父类 model 具体存在方法: field() where() limit() 还有一些方法在_call()自动调用函数里边: table() group() order() having() 在_call()魔术方法里边会判断当前的执行方法是否是一个 method 属性的元素信息, 如果存在就会执行执行以上多个方法是同时使用多个进行条件显示(并且没有顺序要求) $obj - limit(5)-field(
12、id,name)-order(price asc) - 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(
13、“10,12,14”) 查询主键值主键值在 10、12、14 范围的记录信息goods_id in(“10“,“12“,“14“) 1.find()如果我们查询的结果只有一个信息如果我们查询的结果只有一个信息(一维数组一维数组),使用,使用 select()会返回一个二维数组会返回一个二维数组 为了使用方便我们会希望返回一个一维数组,这时候可使用 find()方法2.having()方法设置查询条件,where()设置查询条件 having 和和 where 区别区别 1. 使用有先后顺序使用有先后顺序 2. where price100 having price100 3. where 设置
14、条件,字段必须是数据表中存在的字段设置条件,字段必须是数据表中存在的字段 4. having 设置条件,字段必须是设置条件,字段必须是 select 语句查询出来的字段可以使用语句查询出来的字段可以使用6. 相关聚合函数 count() sum() avg() max() min() 以上聚合函数是最后被调用的方法以上聚合函数是最后被调用的方法 以上方法可以结合具体条件方法使用 例如:$goods - where(goods_price 1000)-count(); 大于 1000 元的商品的总数 目【实现数据添加实现数据添加 add】2014 年 8 月 25 日 17:57select()
15、 add() 该方法返回被添加的新记录的主键 id 值 save() delete() 两种方式实现数据添加 1.数组方式数据添加 $goods = D(“Goods”); $arr = array(goods_name=iphone5s,goods_weight=109); /注意:goods_name 和 goods_weight 是数据表中字段名称 $goods - add($arr);2.AR 方式实现数据添加 a.ActiveRecord 活跃记录 b.AR 规定了程序与数据库之间的关系 c.什么是 AR: d. 一个数据表对应一个类 model e. 一条数据记录对应类的一个对象
16、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:571.制作一个表单 2.通过$_POST 收集信息 3.通过 create()方法实现数据收集,该方法对于非法的字段会自动进行过滤该方法