一、数据修改操作
save() 实现数据修改,返回受影响的记录条数
具体有两种方式实现数据修改,与添加类似(数组、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);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function Update() { //方法一:shuzu $model =D( "info" ); $attr = array ( "Code" => "p014" , "Name" => "修改数据" , "Sex" =>true, "Nation" => "n001" , "Birthday" => "2000-1-1" , ); //调用save()方法来修改数据 $model ->save( $attr ); } |
数据修改成功:
2.AR方式:
a) $goods = D(“Goods”);
b) $goods -> goods_id = 53;
c) $goods -> goods_name = “三星手机”;
d) $goods -> goods_price = 2000;
e) $goods -> where(‘goods_price>10000’)->save();
1
2
3
4
5
|
//方法二:AR $model =D( "info" ); $model ->Name= "Update" ; $model ->Nation= "n001" ; $model ->where( "Code='p006'" )->save(); |
数据修改成功:
以上两种方式如果可行,即要修改全部数据
以上sql语句从技术上可行,从业务上不可行(事故)
tp框架有智能考虑,以上情况的sql语句不被允许执行。
如何执行:
① 明确告诉系统那条sql语句被update更新
② 可以设置where进行sql语句更新操作
save() 方法返回值
0:之前没有问题,执行前后数据没有变化
自然数:受影响的记录条数
false:执行失败
数据修改具体实现:
通过路由给一个操作方法传递参数
http://网址/index.php/模块/控制器/方法upd/变量名1/值/变量名2/值/变量名3/值
以上路由是通过get形式给指定的操作传递了三个参数信息
$_POST方式也可以
原则三个参数信息接收的时候通过$_GET接收即可
例如:$_GET[‘变量名1’];
以上参数信息接收太直白,不安全,需要按照框架规则使用下边的方式接收get参数信息
http://网址/index.php/Admin/Goods/upd/name/tom/age/25/addr/beijing
function upd($name,$age,$addr){
$name;
$age;
$addr;
}
以上参数表述,如果在请求的时候没有按照规则传递参数,那么当前方法禁止访问。
(除非参数有默认值)
修改商品信息步骤:
- 在“修改”按钮处把被修改商品id信息通过get形式传递给upd操作
- 在upd方法里边制作形式参数$goods_id,接收服务器给传递的get变量goods_id
- 在修改表单里边制作隐藏域goods_id,避免tp框架禁止修改语句执行
- 在upd操作方法内部有两个逻辑:展现表单、收集表单
3.自动收集表单修改(必须要会的)
MainController.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//方法三:自动修改表单 $model =D( "info" ); if ( empty ( $_POST )) { $code = "p006" ; $attr = $model ->find( $code ); $this ->assign( "shuju" , $attr ); $this ->display(); } else { $model ->create(); $model ->save(); } |
视图模板的显示页面,Veiw/Main/update.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < head > < meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < title >无标题文档</ title > </ head > < body > <!--自动收集表单数据入库操作 --> <!--注意大小写和数据库中的列名一致 --> < h2 >修改页面</ h2 > < form action="__ACTION__" method="post"> < input type="hidden" name="Code" value="<{$shuju.code}>"/> < div >姓名:< input type="text" name="Name" value="<{$shuju.name}>"/></ div > < div >性别:< input type="text" name="Sex" value="<{$shuju.sex}>"/> </ div > < div >民族::< input type="text" name="Nation" value="<{$shuju.nation}>"/> </ div > < div >生日:< input type="text" name="Birthday" value="<{$shuju.birthday}>"/></ div > < input type="submit" value="修改" /> </ form > </ body > </ html > |
==>
数据库中信息改变:
二、数据删除及执行原生sql语句
delete() 返回受影响的记录条数
$goods -> delete(30); 删除主键值等于30的记录信息
$goods -> delete(“10,12,13”); 删除主键值等于10 12 13的三条记录
$goods -> where(“goods_id>60”)->delete() 把符合条件的记录都给删除
1
2
3
4
5
6
7
8
9
10
11
|
//删除数据 function Delete () { $model =D( "info" ); $model -> delete (); //里面不加条件会删除所有数据 //根据主键值删 $model -> delete ( "p011" ); //根据条件删除 $model ->where( "nation='n001'" )-> delete (); } |
执行原生sql语句
- 查询语句query() 返回一个二维数组信息
- 添加、修改、删除 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 goods_name = ‘htc_two’ where goods_id=100”;
$goods -> execute($sql);