php随意记记 thinkphp5拼接数组查询条件 variable type error: array 错误

 

 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}]"

方式一:直接传入数组

$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