Php 在调用insert()之前验证/验证数据
我正在使用Zend的Php 在调用insert()之前验证/验证数据,php,mysql,zend-framework,Php,Mysql,Zend Framework,我正在使用Zend的insert()函数在数据库表中插入记录。 如。 从数据库模型对象,我调用Zend\u Db\u表的insert()函数,并将传入数据作为数组传递-$data,即 $this->insert($data); $data是一个数组。$data的内容是混合数据类型-整数、货币、文本等 为了验证传入的$data数组,我编写了一个函数,verifyData($data) 如上所述,此函数: 修剪传入数据并取消设置$data数组中的任何字段(如果为空) 然后该函数检查是否存在
insert()
函数在数据库表中插入记录。
如。
从数据库模型对象,我调用Zend\u Db\u表的insert()
函数,并将传入数据作为数组传递-$data
,即
$this->insert($data);
$data
是一个数组。$data
的内容是混合数据类型-整数、货币、文本等
为了验证传入的$data
数组,我编写了一个函数,verifyData($data)
如上所述,此函数:
任何帮助/建议都将不胜感激。
insert
应该已经解决了您可能遇到的任何SQL注入问题。至于类型检查和转换,PHP中有几种方法可用。例如,检查并转换为int
:
if(ctype_digit($something)) {
$something = (int)$something;
}
这实际上取决于您需要的特定验证。一个简单的开始方法可能是,使用Zend_验证和Zend_过滤器对数据集应用过滤和验证
//A simple exaample of how you might use Zend_Filter_Input
private function verifyData(&$data) {
//Add any filters you want there are many standard filters, order of filters may matter
$filters = array(
'*' => 'StringTrim', //trim all fields
'id' => 'Digits' //filter for digits on id field
);
//add any validators you want there are many standard validators, order of validators may matter
$validators = array(
'*' => 'NotEmpty' //check all fields for empty()
);
$input = new Zend_Filter_Input($filters, $validators, $data) {
if ($input->isValid() {
return TRUE;
} else {
return FALSE
}
}
不用说,这是一个不完整的例子,说明了它是如何工作的,但它应该给你一个基本的想法。有许多不同的方法来完成验证,找到一种你喜欢的方法并付诸实践。我个人最喜欢的是在输入阶段(表单、控制器…)进行基本过滤和验证,然后在将数据发送到映射器以插入数据库之前在域模型中应用任何其他过滤或验证。
祝你好运
你被困在哪里?你尝试过什么?如果你想知道如何调整你现有的函数,至少你必须展示该函数的代码。僵尸猎人和杰伦:如果不清楚,很抱歉。我现在更新了我的问题。感谢minitech。我同意一种方法是检查特定数据类型的特定字段。但是,如果一个表中有太多列,我希望找到更好的解决方案来执行上述操作,而不是按顺序检查每个列。
//A simple exaample of how you might use Zend_Filter_Input
private function verifyData(&$data) {
//Add any filters you want there are many standard filters, order of filters may matter
$filters = array(
'*' => 'StringTrim', //trim all fields
'id' => 'Digits' //filter for digits on id field
);
//add any validators you want there are many standard validators, order of validators may matter
$validators = array(
'*' => 'NotEmpty' //check all fields for empty()
);
$input = new Zend_Filter_Input($filters, $validators, $data) {
if ($input->isValid() {
return TRUE;
} else {
return FALSE
}
}