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();
}
通过过滤,把数组中合法的输入赋给了另外一个数组。但是这种方法是在是太麻烦了。请问有没有更好的方法实现这个功能呢?
解决方案
使用 ORM
吧,骚年!
ORM:不管你传入多少字段,我只 插入 | 更新
咱俩的 交集字段
。
这篇关于PHP实现数组的白名单过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文