摘要:原生查询,尽量不使用,使用构造器。class Demo { //1. 原生查询是直接调用Connection类中的query()和execute()来实现。 //2. query()实现读操作,主要用于select语句和存储过程的查询。
原生查询,尽量不使用,使用构造器。
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记录';*/
//在实际的开发过程中,尽可能不要在控制器中直接操作数据库,而是采用模式来实现
//模型都是基于数据库操作,
}
批改老师:韦小宝批改时间:2018-11-16 09:07:24
老师总结:看到了你的问题!这个问题在工单中出现过!你可以将field中的方括号去掉!然后将 =>改写成as。工单中相同问题参考:http://www.php.cn/wenda/143034.html