返回数据库操作原生......登陆

数据库操作原生与构造器

演绎2018-11-16 01:31:56239

原生查询,尽量不使用,使用构造器。

class Demo
{
    //1. 原生查询是直接调用Connection类中的query()和execute()来实现。
    //2. query()实现读操作,主要用于select语句和存储过程的查询。
    //3. execute()实现写操作,例如新增,更新与删除等。
    
    public function select()
    {
        echo "select 方法";        

        //用命名占位符: 用关联数组(顺序可以随意)
        $sql="SELECT namecn,id FROM about WHERE id> :id LIMIT :num";
        //$res=Db::query($sql,['id'=>3,'num'=>3]);
        //[ SQL ] SELECT namecn,id FROM about WHERE id> '3' LIMIT '3' [ RunTime:0.000270s ]
        //参数默认传入的是字符串,所以还需要转换
        $res=Db::query($sql,['id'=>[3,\PDO::PARAM_INT],'num'=>[3,\PDO::PARAM_INT]]);
        //[ SQL ] SELECT namecn,id FROM about WHERE id> 3 LIMIT 3 [ RunTime:0.000403s ]
        dump($res);
    }

    public function update()
    {
        //更新操作
        $sql="UPDATE about SET introctioncn = :introction WHERE id= :num "; //注意,:后面不能有空格
        Db::execute($sql,['introction'=>'更新字段值','num'=>[19,\PDO::PARAM_INT]]);
        //如果操作失败,会自动终止运行,并输出异常
        return '更新成功';
    }

}

一、新增单条记录 INSERT()

public function insert()
{
    //新增单条记录
    $data=[
      'namecn'=>'荣誉',
      'introctioncn'=>'荣誉描述',
      'orderid'=>'2'  //注意是以英文逗号分开,不是以分号,经常容易犯错。最后一个不要分号,可以练成一行去写,这样就可以知道后面不需要分号了
    ];
    $num=Db::table('about')
    ->data($data)
    ->insert();
//行与行之间没有分隔符号,理解为$num=Db::table('about')->data($data)->insert();即可
$id=Db::getLastInsID();
return $num ? 'data方式新增单条记录,一般最常用的就是这个。添加记录,id='.$id : 'No记录';

//inserrGetId()==insert()+getLaseInseID() 直接二合一操作
//$num=Db::table('about')->insertGetId($data);
//return $num ? 'insertGetId方式新增单条记录,添加记录,id='.$num : 'No记录';

//一般不会在find 和select后面加参数,这方法叫终结方法,不是链式调用
    //一般不会在find 和select后面加参数,这方法叫终结方法,不是链式调用
}

二、新增多条记录 INSERTALL()

public function insertall()
{
    $data=[
        ['namecn'=>'技术','introctioncn'=>'程序员','orderid'=>'1'],
        ['namecn'=>'UI','introctioncn'=>'美女','orderid'=>'2'],
        ['namecn'=>'架构师','introctioncn'=>'男的多','orderid'=>'3']
    ];
    $num=Db::table('about')->data($data)->insertAll();
    // INSERT INTO `about` (`namecn` , `introctioncn` , `orderid`) VALUES ( '技术','程序员',1 ) , ( 'UI','美女',2 ) , ( '架构师','男的多',3 ) [ RunTime:0.002119s ]
    return $num ? 'insertAll方式新增多条记录,添加记录为'.$num : 'No记录';
}

三、查询

备注:->field(['id'=>'主键','namecn'=>'名称','introctioncn'=>'简介'])

查询中使用别名的方法都不成功(find和select都一样),提示(不支持的数据表达式);使用环境是iis7.5,php5.6或7

if ($strict && !preg_match('/^[\w\.\*]+$/', $key)) {            throw new Exception('not support data:' . $key);        }


3.1 find()方法

public function find() //find只能支持主键,不能放条件
{
    //查询单条记录
    //$res=Db::table('about')->find(19);//查询主健为19的记录
    //table 获取完整的表名,find获取满足条件的第一一条

    //另外一种写法
    $res=Db::table('about')

        //->field('id,namecn,introctioncn') //查询指定的列,如果全部查询,可以省略此条件
        //->where('id','>',19) //where(字段 表达式 值)

        ->field(['id','namecn','introctioncn']) //放在数组中,可以直接使用
        //->field(['id'=>'主键','namecn'=>'名称','introctioncn'=>'简介']) //别名
        ->where('id','>',19) //where(字段 表达式 值)
        ->find();//查询主健为19的记录
    dump($res);

}

3.2 select()

public function select()
{

    $res=Db::table('about')
        //链式调用
        ->field(['id','namecn','introctioncn'])
        //->field(['id'=>'序号','namecn'=>'标题','introctioncn'=>'描述'])  //不支持
        //
    //->where('id'>15) //字符串形式
        ->where('id','>',15) //表达式
    //->order('orderid asc')
        ->order('orderid', 'asc')//表达式
        ->limit(3)
    ->select();

    dump($res);
}

四、更新 UPDATE()

public function update()
{
    //更新操作必须是基于前置查询,不允许无条件更新,否则不能执行
    //update()也是一个终极方法
    //将排序小于等于2的记录,增加3
    /*$num= Db::table('about')
        ->where('orderid','<=',2)
        ->data(['orderid'=>Db::raw('orderid+3')])//raw获取原始数据,不转译(否则orderid是字符串,表达式会出错,不能相加);data是数组,所以用[]
        ->update();*/
//更新多条记录
    $num=Db::table('about')
        ->update(['orderid'=>20,'id'=>25]);//根据条件更新单条记录
    return $num ? '更新成功,更新'.$num.'记录' : 'No记录';
}

注意:raw获取原始数据,不转译

五、删除 DELETE()

public function delete()
{
    //删除必须基于前置查询,不允许无条件删除
    //delete() 终极方法
    $num=Db::table('about')->delete(24);
    return $num ? '单条记录删除,删除'.$num.'记录' : 'No记录';

    /*$num=Db::table('about')->delete([25,26,27]); //多条记录以数组的方式记录
    return $num ? '多条记录删除,删除'.$num.'记录' : 'No记录';*/

    //$num=Db::table('about')->where('id',28)->delete();
   /* $num=Db::table('about')
        ->where('id','>',29) //链式方法,方便阅读及写注释
        ->delete();
    return $num ? '多条记录删除,删除'.$num.'记录' : 'No记录';*/

    /*$num=Db::table('about')
        ->where(ture) //这样也可以删除,一般不这么写
        ->delete();*/

   /* $num=Db::table('about')->delete(ture);//清空about表的所有数据,建议使用软删来实现,用更新来模式删除
    return $num ? '多条记录删除,删除'.$num.'记录' : 'No记录';*/

    //在实际的开发过程中,尽可能不要在控制器中直接操作数据库,而是采用模式来实现
    //模型都是基于数据库操作,

}


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送