我正在使用Zend的insert()
函数在数据库表中插入记录。
例如。
从数据库模型对象,我调用Zend_Db_Table's insert()
函数并将传入的数据作为数组传递 - $data
,即
$this->insert($data);
$data
是一个数组。 $data
的内容是混合数据类型 - 整数,金钱,文本等。
为了验证传入的$data
数组,我编写了一个函数verifyData($data)
。
private function verifyData(&$data) {
//Trim whitespace characters from incoming data.
foreach($data as $key => $val)
{
$data[$key] = trim($val);
if(empty($data[$key])) {
unset($data[$key]);
}
}
//Checking for not null table columns
if( empty($data['id']) || empty($data['name']) || empty($data['age'])) {
error_log("One of the required fields is missing");
return false;
}
else {
return true;
}
}
如上所述,此功能:
我需要帮助/建议,以上述功能/以任何其他方式添加以下验证:
处理数据类型检查的一种方法是循环传入数据数组并将特定列值转换为其数据类型并进行验证。但我想知道是否有任何有效/标准的方法来实现上述两点。
一个示例场景是,例如在我的webform上,当新人被添加到db时,我需要输入名称,年龄和薪水,其中名称和年龄是强制性的。年龄和薪水应仅作为整数输入。我想在php级别实现这个限制,我正在使用Zend Framework。
非常感谢任何帮助/建议。
答案 0 :(得分:1)
一种简单的启动方式可能是Zend_filter_Input,它使用Zend_Validation和Zend_Filter对数据集应用过滤和验证。
//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
}
}
毋庸置疑这是一个不完整的例子,说明这是如何运作的,但它应该给你基本的想法。有许多不同的方法可以完成验证,找到一个你喜欢的方法并去寻找它。
我个人最喜欢的是在输入阶段(表单,控制器......)进行基本的过滤和验证,然后在将数据发送到要插入的映射器之前在域模型中应用任何其他过滤或验证数据库。
祝你好运......
答案 1 :(得分:0)
insert
应该已经处理了您可能遇到的任何SQL注入问题。至于类型检查和转换,PHP中有几种方法可用。例如,检查并转换为int
:
if(ctype_digit($something)) {
$something = (int)$something;
}
这实际上取决于您需要的具体验证。