php sql delete 返回值,delete方法

delete方法

1、功能:删除数据表中满足条件的记录必须设置条件,否则该方法拒绝执行,以确保数据安全

2、源码:系统中有二个delete方法,名称相同,功能不同

1. /thinkphp/library/think/db/Buider.php 中的delete方法

b4ceb4aa3d305908fedeab9afdedb426.png说明:该delete方法负责根据条件,生成删除记录的SQL语句字符串

2. /thinkphp/library/think/db/Query.php中的delete方法

0f691acf4ea10e7ba6673f1c9e17677f.png说明:该delete方法根据主键或条件删除记录

3、参数与返回值我们先说返回值:定义在Builder.php类中的delete方法,返回一个SQL删除语句的字符串,如:DELETE  FROM tp5_staff WHERE id = 1010 ;定义在Query.php类中的delete方法,返回受影响记录数,即删除记录数量(整数)。

参数说明:

如delete方法前设置了where方法,则delete参数无效

即设置了where方法,又设置了delete参数,刚where优先级高于delete参数参数类型说明数组 /  $data [ ]设置删除条件,仅支持数组查询器,不支持字符串

布尔 / true强制清空数据表

4、语法:条件写在参数中Db::table( 表名 ) -> delete( 条件表达式 );清空数据表Db::table( 表名 ) -> delete( true );前置条件where方法Db::table( 表名 ) -> where( 条件表达式 ) -> delete(  );最后的delete方法不应有任何参数,如果有,则where方法失效

5、实例演示先查看一下tp5_staff表中记录,将要删除记录进行标注:

09b9a923461e1a7494fb4660098e9960.png

任务:删除id=1022的记录演示给delete方法传参方式删除

演示where方法设置条件进行删除

1. 给delete方法传参:Index.php 控制器源代码:<?php

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

// 字符串方式传入条件表达式

Db::table('tp5_staff')->delete('id=1022');

//查看该记录是否还在?

dump(Db::table('tp5_staff')->find(1022));

}

}运行结果如下:array(7) {

["id"] => int(1022)

["name"] => string(12) "司马道长"

["sex"] => int(1)

["age"] => int(39)

["salary"] => float(8540)

["dept"] => int(1)

["hiredate"] => string(10) "2010-11-20"

}仍然可以查询到id-1022的数据,证明删除失败!

我们Index.php控制器中delete参数做些修改// 字符串方式传入条件表达式

Db::table('tp5_staff')->delete('id',1022');仍然删除失败!

是不是不支持缩写呢?我们再次修改参数形式:// 字符串方式传入条件表达式

Db::table('tp5_staff')->delete('id','=',1022');

结果仍然删除失败

现在我们使出“洪荒之力”,直接上数组条件表达式:查询表达式下节课就会讲到,这里先做一了解

表达式 :( id,'=',1022)  等价于  ( [ 'id' => [ '=' , 1022 ] ] )经过修改后的:Index.php文件如下:<?php

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

// 数组方式传入条件表达式

Db::table('tp5_staff')->delete(['id'=>['=',1022 ]]);

//查看该记录是否还在?

dump(Db::table('tp5_staff')->find(1022));

}

}运行结果:NULL  //查询不到id =1022的记录,结果为NULL,表示删除成功啦!

b2797bf0241c0660497cbd095e595786.png下面再演示一下给delete传入true:为了演示直观,我们先复制一张与tp5_staff一样的表,还记得复制表的MySQL语句吗?忘记了,请查看一下前面的MySQL复习部分吧!CREATE TABLE tp5_temp5 AS SELECT * FROM `tp5_staff` ;查看 tp5_temp5表:

cbea2f88946ebc4df675c26f871d8650.png

修改Index.php 控制器文件:<?php

namespace app\index\controller;

use think\Db;

class Index {

public function index() {

//传入true,清空当前数据表

Db::table('tp5_temp5') -> delete(true);

//查看是否清空?

dump( Db::table('tp5_temp5') -> select());

}

}运行结果:array(0) {   //查询结果为空,说明清空成功,表中无任何记录

}再次查看数据表:

57f88bca55b28ddd5ac487abcd25792a.png

2. 下面演示一个where条件删除:这里用到了构造查询器的知识,我们还没有讲到,可先做了解,或者跳过

任务:删除id=1023到1026之间的4条记录为了测试where和delete删除条件优先级,我们将1023和1024记录删除条件放在where参数中,将1025、1026记录删除条件放在delete参数中,最终通过查询结果,确定究竟哪个条件生效了,也就知道哪个语句条件优先级高了~~Index.php  代码如下:<?php

namespace app\index\controller;

use think\Db;

class Index {

public function index() {

//创建一个查询器

$map1 = [];

$map2 = [];

$map3 = [];

$map1['id'] = ['in',[1023,1024]];

$map2['id'] = ['in',[1025,1026]];

$map3['id'] = ['between',[1023,1026]];

//传入true,清空当前数据表

Db::table('tp5_staff') ->where($map1) -> delete($map2);

//查看是否清空?

dump( Db::table('tp5_staff') ->where($map3) -> select());

}

}运行结果如:array(2) {

[0] => array(7) {

["id"] => int(1023)

["name"] => string(9) "段王爷"

["sex"] => int(0)

["age"] => int(90)

["salary"] => float(9560)

["dept"] => int(2)

["hiredate"] => string(10) "2015-12-31"

}

[1] => array(7) {

["id"] => int(1024)

["name"] => string(9) "鲁大师"

["sex"] => int(0)

["age"] => int(60)

["salary"] => float(300)

["dept"] => int(1)

["hiredate"] => string(10) "2012-09-09"

}

}分析:1023和1024记录仍在结果集,说明删除的是1025和1026,delete方法中的条件生效了! 从生成的SQL语句中也可以看到:[ SQL ] DELETE FROM `tp5_staff` WHERE `id` IN (1025,1026)

[ SQL ] SELECT * FROM `tp5_staff` WHERE `id` BETWEEN 1023 AND 1026结论:where条件与delete条件共存时,忽略where条件现在查看数据表:

129a1405410b8a70ec7998b74dd4db4a.png

6、总结:1.delete方法属于风险操作,必须带有条件。尽管delete方法删除的数据可以恢复,但是操作之前,还是要仔细检查,确认数据无用再操作;delete方法不建议传入参数,条件全部采用where传入,便于用闭包构造高级查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值