php 白名单,PHP实现数组的白名单过滤

在PHP中,经常会将数组作为参数进行传递;现在的一个需求是,首先Web程序从Request中获取到了一些参数,比如usernumber,username,password等等,将这些拼装成了一个数组,并将其作为参数,传给model层并写入数据库。比如:

在控制器中拼装了如下参数:

$params = [

'number' => 1001,

'username' => 'kirineko',

'password' => '123456',

'school' => 'cmu',

];

Model\User::insert($params);

在模型层中写了一个insert方法:

public static insert($params)

{

$ins = new self();

foreach($params as $key => $value) {

$ins->{$key} = $value;

}

$ins->save();

}

但是目前的问题在于,如果我在传递参数时,传递的数组索引,在数据库中并没有,比如上述传递的school,在数据库中就并没有这个字段;并比如数据库中需要传入age的值,上述数据中却并没有传递。上述这些情况都会造成数据库写入失败。

现在我的解决方案是,在insert方法中,对传入的数据参数进行过滤,方法如下:

public static insert($params) {

$ins = new self();

$filters = ['number','username','password','age'];

$real_params = [];

foreach ($filters as $filter) {

if(isset($params[$filter])) {

$invite_params[$filter] = $params[$filter];

}

}

foreach($invite_params as $key => $value) {

$ins->{$key} = $value;

}

$ins->save();

}

通过过滤,把数组中合法的输入赋给了另外一个数组。但是这种方法是在是太麻烦了。请问有没有更好的方法实现这个功能呢?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值