建设部网站监理工程师,网站建设课程学习,邹平做网站公司,wordpress获取分类列表和分页ThinkPHP 添加数据 add 方法 ThinkPHP 内置的 add 方法用于向数据表添加数据#xff0c;相当于 SQL 中的 INSERT INTO 行为。ThinkPHP Insert 添加数据添加数据 add 方法是 CURD#xff08;Create,Update,Read,Delete / 创建,修改,读取,删除#xff09;中的 Create 的实现相当于 SQL 中的 INSERT INTO 行为。 ThinkPHP Insert 添加数据 添加数据 add 方法是 CURDCreate,Update,Read,Delete / 创建,修改,读取,删除中的 Create 的实现ThinkPHP 支持以普通数组方式和面向对象方式将数据写入数据表。 现在以《PHP MySQL 数据库教程》中操作 user 表数据的例子具体参见MySQL Insert into 添加数据为例来演示如何在 ThinkPHP 中实现对数据表的数据添加操作。 例子 在 IndexAction 控制器Lib/Action/IndexAction.class.php里添加 insert() 操作 public function insert(){ header(Content-Type:text/html; charsetutf-8); $Dao M(User); // 实例化模型类 // 构建写入的数据数组 $data[username] 大部落; $data[password] md5(123456); $data[email] 12345163.com; $data[regdate] time(); // 写入数据 if($lastInsId $Dao-add($data)){ echo 插入数据 id 为$lastInsId; } else { $this-error(数据写入错误); } } 访问执行该操作http://127.0.0.1/html/Myapp/index.php/Index/insert 语法解读 M(User) 用于高效实例化一个数据模型M 是 new Model 的简写称为快捷方法参数为要操作的表名。 接下来构建要保存数据的数组 $data 。 最后是用 add() 方法将数据写入库表由于使用的是 M快捷方法需要将 $data 数组传入 add() 方法。 add() 方法如果添加数据记录成功返回的是新数据记录主键可直接得到。 该例子实际运行的 SQL 为 INSERT INTO user(username,password,email,regdate) VALUES (大部落,e10adc3949ba59abbe56e057f20f883e, 12345163.com,1283612673) 提示运行该例子请确认在配置文件里正确配置了数据库的相关账号密码等信息具体参见《ThinkPHP 项目配置》 对象方式添加数据 上面的方式是以构造数据数组的方式然后将数据以参数形式传入 add 方法写入数据表。ThinkPHP 也支持以对象的方式将数据写入数据表将上面的代码更改为 public function insert(){ header(Content-Type:text/html; charsetutf-8); $Dao M(User); // 实例化模型类 // 数据对象赋值 $Dao-username 大部落; $Dao-password md5(123456); $Dao-email 12345163.com; $Dao-regdate time(); // 写入数据 if($lastInsId $Dao-add()){ echo 插入数据 id 为$lastInsId; } else { $this-error(数据写入错误); } } 对象方式除了数据以数据对象方式赋值外在调用 add 方法写入数据的时候不需要传递参数ThinkPHP 表单数据智能写入 create 方法 创建数据对象 create() 除了手动构造入库的数据集之外ThinkPHP 还提供了自动创建数据对象的 create() 方法。create() 方法将自动收集提交的表单数据并创建数据对象而无需人工干预这在表单 数据字段非常多的情况下更具优势。 将前文写入表单数据的例子用 create() 来实现 public function insert2(){ header(Content-Type:text/html; charsetutf-8); $Dao M(User); if($Dao-create()){ $Dao-password md5($_POST[password]); $Dao-regdate time(); if($lastInsId $Dao-add()){ echo 插入数据 id 为$lastInsId; } else { echo 数据写入错误; } }else{ exit($Dao-getError(). [ a hrefjavascript:history.back()返 回/a ]); } } create() 创建数据对象后将自动收集提交过来的表单数据。而表单数据可能需要经过一定加工例如将密码加密才能写入数据表所以可以对数据对象的成员属性值根据进行修改或添加去除等。 提示create() 创建的数据对象存放于内存在执行入库动作add() 或 save()之前都可以进行修改。 在上面的例子里create()方法 的行为和 date()方法 是一致。但 date() 方法只是简单的创建数据对象但 create() 方法还具备 令牌验证 数据自动验证 字段映射支持 字段类型检查 数据自动完成 等各种高级的数据功能要完成这些高级数据模型功能需要使用 D方法 实例化数据模型。在 LibModel 目录下创建 UserModel.class.php 文件User 为创建的模型对象也对应 前缀_user 表加入自动验证和自动填充规则 class UserModel extends Model{ // 自动验证设置 protected $_validate array( array(username,require,用户名必须填写,1), array(email,email,邮箱格式错误,2), array(username,,用户名已经存在,0,unique,1), ); //自动填充设置 protected $_auto array( array(regdate,time,self::MODEL_INSERT,function), array(password,md5,self::MODEL_INSERT,function), ); } 将 insert2 操作更改为 public function insert2(){ header(Content-Type:text/html; charsetutf-8); $Dao D(User); if($Dao-create()){ if($lastInsId $Dao-add()){ echo 插入数据 id 为$lastInsId; } else { echo 数据写入错误; } }else{ exit($Dao-getError(). [ a hrefjavascript:history.back()返 回/a ]); } } 如果提交的数据不符合验证要求如用户名存在则 create() 创建数据对象失败返回 FALSE $Dao-getError() 会打印出自动验证设置规则里面设置的提示信息用户名已经存在 如果验证规则通过后系统会进行自动填充设置将表单密码进行 MD5 加密以及取得当前的时间戳填充入 create() 的数据对象。 所以 D方法 配合 create() 是非常智能而强大的恰当运用可以达到事半功倍快速开发的目的。 提示 D 方法配合 create() 由于其功能强大也就损失了一定的效率在业务逻辑不复杂的情况下推荐 M方法data() 模式create() 默认接受 POST 数据若要接受其他类型数据只需在参数内指定即可如接受 GET 数据create($_GET) ThinkPHP 查询数据 方法 ThinkPHP 查询数据主要提供以下几类查询 select普通查询同 findAll() 方法 find取得符合查询条件的一条记录 getBy动态查询根据某个字段取得符合查询条件的一条记录 getField获取某个字段的值或多个字段的索引数组 区间查询取得符合查询条件的区间记录 统计查询取得符合查询条件的统计数据 定位查询取得符合查询条件的一条或多条记录 原生SQL查询支持以原生 SQL 进行查询或执行操作 select() select() 是 ThinkPHP 中最常用的普通查询方法得到的是一个二维数组。findAll() 为 select() 方法的别名 并建议使用 select() 读取操作 下面的例子将 user 表的所有数据读取出来并显示 public function read(){ $Dao M(User); // 查询数据 $list $Dao-select(); //dump($list); // 用 dump() 可以在调试阶段查看数据是否已读取 // 模板变量赋值 $this-assign(list, $list); // 输出模板 $this-display(); } 假设上面的例子对应的 class 文件为 Lib/Action/IndexAction.class.php 那么对应的模板文件为 Tpl/default/Index/read.html。 数据显示模板 模板文件用于显示刚才读取的 User 表的数据。在学习阶段要不想使用模板也可以直接使用 foreach 语法在 read() 操作内直接显示读取的数据。下面是模板相应的代码片段我们将读取的数据在一个表格中显示出来 1 注册时间 list idvo {$vo[username]} {$vo[email]} {$vo[regdate]|dateY-m-d H:i,###} 10%ID 1 注册时间 list idvo {$vo[username]} {$vo[email]} {$vo[regdate]|dateY-m-d H:i,###} 30%用户名 1 注册时间 list idvo {$vo[username]} {$vo[email]} {$vo[regdate]|dateY-m-d H:i,###} 30%电子邮件 1 注册时间 list idvo {$vo[username]} {$vo[email]} {$vo[regdate]|dateY-m-d H:i,###} 1 注册时间 list idvo {$vo[username]} {$vo[email]} {$vo[regdate]|dateY-m-d H:i,###} 要了解更多关于 ThinkPHP模板 的知识请参阅《ThinkPHP 模板》。 field() 查询指定字段 select() 方法默认是查询所有字段的数据如果要查询某个或某些字段就需要使用 filed() 方法。 filed() 是属于 ThinkPHP 连贯操作 中的一个方法如在上面的例子中只查询用户名和电子邮件地址则查询 方法对应更改为 $list $Dao-field(username,email)-select(); 使用查询条件 使用 ThinkPHP 连贯操作 可以很方便的对数据查询使用查询条件。下面是一些简单的查询条件的例子。 where() 条件 // 构造查询条件 $condition[username] Admin; // 查询数据 $list $Dao-where($condition)-select(); 上述查询的就是 usernameAdmin 这个条件的数据。关于 ThinkPHP where 条件更详细资料请参阅 《ThinkPHP Where 条件》。 ORDER BY 排序 在查询中使用 ORDER BY 对数据进行排序 // 查询数据 list $Dao-order(uid DESC)-select(); 这个例子就是数据按照 ORDER BY uid DESC 进行查询而 order() 方法中的参数意义跟 SQL 语句中的意义完全 一致。 LIMIT 限制 在查询中使用 LIMIT 限定数据返回的记录数 // 查询数据 $list $Dao-limit(4,5)-select(); 这个例子就是将第 5-10 条记录取出limit() 方法内的参数意义跟 SQL 语句中的 LIMIT 完全一致。 连贯操作 ThinkPHP 中允许将数据对象中的各个方法写在一起操作如 $list $Dao-order(uid DESC)-limit(4,5)-select(); 这就是连贯操作关于连贯操作更详细的介绍参见《ThinkPHP 连贯操作》。 原生SQL查询有 query() 和 execute() 两个方法 query()用于 SQL 查询操作并返回符合查询条件的数据集 execute()更新和写入数据的 SQL 操作返回影响的记录数 query() query() 方法是用于 SQL 查询操作和select()方法一样返回符合查询条件的数据集。 例子 public function read(){ // 实例化一个空模型没有对应任何数据表 $Dao M(); //或者使用 $Dao new Model(); $list $Dao-query(select * from user where uid5); if($list){ $this-assign(list, $list ); $this-display(); } else { $this-error($Dao-getError()); } } 对于 query() 方法返回的数据集跟 select() 一样可以在模板里直接循环输出。 execute() execute() 方法用于更新和写入数据的 SQL 操作注非查询操作无返回数据集返回影响的记录数。 例子 public function read(){ header(Content-Type:text/html; charsetutf-8); // 实例化一个空模型没有对应任何数据表 $Dao M(); //或者使用 $Dao new Model(); $num $Dao-execute(update user set email 12345xxx.com where uid3); if($num){ echo 更新 ,$num, 条记录。; }else{ echo 无记录更新; } } 如果查询比较复杂或一些特殊的数据操作不能通过 ThinkPHP 内置的 ORM 和 ActiveRecord 模式实现时就可以通过直接使用原生 SQL 查询来实现。 注意以上都是 user 没有表前缀的例子在查询语句中查询的表应该写实际的表名字包括前缀。 小技巧 原生 SQL 查询需要在查询语句中写上对应的表名如果表名有改动的时候就需要逐行去更改 SQL 语句中的表名字这样不免麻烦。ThinkPHP 提供了一个小技巧来帮助解决这个问题。 在 SQL 语句中以 __TABLE__ 来替代真实的表名而在实例化模型时仍以表名为参数如 public function read(){ $Dao M(User); $list $Dao-query(select __TABLE__ from user where uid5); } 系统在解析的时候会自动替换成当前模型对应的表名这样就可以做到即使表名有所变化只需修改实例化对应的表名即可而不用修改原生的 SQL 语句。