PHP sql写法注意点:
①、php原生sql写法: $result = Db::query('select b.* from tp_admin a LEFT JOIN tp_cate b on(a.id= b.id) ');
占位符写法: $result = Db::query('select * from tp_cate where id = :id',['id'=>$id]);
拼接字符串:
$sql = 'select * from t_admin where 1=1';
$sql .= ' and nickname = '.$param['nickname'];
$sql .= ' and create_time >= '.$param['start'];
②、thinkphp内置写法:
$result = model('admin')->select();
--------------------------------------------
渲染返回数据有区别的:
$dataview = [
'allData' => $result,
];
$this->assign($dataview);
return view();
-------------------------------------------
前台js接受:
①、原生写法的渲染结果,报错 htmlentities() expects parameter 1 to be string, array given
<script>
console.log('{$allData}'); //报错
</script>
解决方案:
php后台代码处理:(将数组类型转成JSON字符串)
$result = json_encode(Db::query('select b.* from tp_admin a LEFT JOIN tp_cate b on(a.id= b.id) '));
②、tp内置写法: 正确 渲染结果是string类型
<script>
var xx = '{$allData}'
console.log(typeof(xx)); //ok ,返回string类型
</script>
格式化输出: $str =sprintf("sprintf输出:他名字叫%s,年龄是%u",'xiaohao',20);
结果:
sprintf输出:他名字叫xiaohao,年龄是20
session传值和取值
1 向session中存信息: 2 session('admin',['id'=>$ret['id'],'nickname'=>$ret['nickname']]); 3 获取session中的信息: 4 session('admin.id') or session('admin')['id'] 5 6 ---------------------------------------------- 7 从request中获取信息 8 $_GET['name'] or $_POST['name'] 9 || 10 input('name') 11 ----------------------------------------------- 12 判断请求类型 13 request()->isGet() //request()->isAjax()
总结:
$_SESSION 、 $_REQUEST 等貌似都可以用session() 和 request() 来调用
验证器的使用
class User extends Validate { protected $rule = [ 'name' => 'require|max:25', 'password' => 'require', 'age' => 'number|between:1,120', 'email' => 'email', ]; protected $message = [ 'name.require' => '名称必须', 'name.max' => '名称最多不能超过25个字符', 'password.require' => '密码不能为空', 'age.number' => '年龄必须是数字', 'age.between' => '年龄只能在1-120之间', 'email' => '邮箱格式错误', ]; #上面的写法,可简写成如下(上面的写法信息更加具体) protected $rule = [ 'name|用户名' => 'require|max:25', 'password|密码' => 'require', 'age|年龄' => 'number|between:1,120', 'email|邮箱' => 'email' ]; #可以定义场景,即使用指定的变量规则 public function sceneLogin(){ return $this->only(['name', 'password']); } } --------------------------------------------------------------------------- 使用:
$validate = new appindexvalidateUser; #只使用自定义规则,不适用场景验证 if (!$validate->check($data)) { return $validate->getError(); } #使用自定义验证场景,scene开头名字为login,调用的时候就使用 if (!$validate->sceneLogin()->check($data)) { return $validate->getError(); } 或者 if (!$validate->scene('login')->check($data)) { return $validate->getError(); }
给控制器增加后缀Controller区分
1 修改config/app.php配置文件 2 // 控制器类后缀 3 'controller_suffix' => true,
注意增加了这个之后,原本的Index.php就没用了,所以要访问首页,自己得创建一个IndexController.php
php中的json对象和json字符串转换
①、将json字符串转换成json数组对象 $str = '[{"u6708u4efd":"201801","IPD":"9","POT":"25","PLC":"386","SEN":"202","INV":"168"},{"u6708u4efd":"201802","IPD":"8","POT":"10","PLC":"119","SEN":"125","INV":"40"},{"u6708u4efd":"201803","IPD":"6","POT":"35","PLC":"383","SEN":"214","INV":"200"},{"u6708u4efd":"201804","IPD":"22","POT":"33","PLC":"341","SEN":"243","INV":"130"},{"u6708u4efd":"201805","IPD":"10","POT":"38","PLC":"443","SEN":"240","INV":"135"},{"u6708u4efd":"201806","IPD":"4","POT":"20","PLC":"379","SEN":"266","INV":"130"},{"u6708u4efd":"201807","IPD":"7","POT":"16","PLC":"376","SEN":"341","INV":"132"},{"u6708u4efd":"201808","IPD":"0","POT":"0","PLC":"1","SEN":"0","INV":"0"}]'; $jsonArr = json_decode($str);
②、将json数组转成json字符串 $jsonArr = json_encode(Db::query('select DISTINCT date from tp_data')); var_dump($jsonArr); //string(136) "[{"date":1},{"date":2},{"date":3},{"date":4},{"date":5},{"date":6},{"date":7},{"date":8},{"date":9},{"date":10},{"date":11},{"date":12}]"
thinkphp5拼接数组查询条件
方式一:直接传入数组
$where = array(); if (!empty($status)) $where[] = array('status', '=', $status); if (!empty($auid)) $where[] = array('auid', '=', $auid);
方式二:数组对象查询,需要 实例化Where() ,use thinkdbWhere;
$where = new Where(); if ($start_time > 0 && $end_time > 0) $where['s.create_time'] = array('between', [$start_time, $end_time]); if (!empty($status)) $where['s.status'] = array('=', $status); if ($user_id > 0) $where['s.auid'] = array('=', $user_id);
variable type error: array 错误
https://www.kancloud.cn/manual/thinkphp5/118017 当页面返回 thinkphp5 variable type error: array 错误时,是返回的类型错误,默认default_return_type返回是html