美好的一天!
我想在Zend_Framework中保存一行时保护我的数据库:
function addController() {
....
if ($form->isValid($_POST)) {
addRecods($form->getValues());
}
}
class DbManager extends Zend_Db_Table_Abstract
...
function addRecords(array $array) {
$row = $this->createRow();
$row->field1 = $this->field_from_form1;
$row->field2 = $this->field_from_form2;
....
$row->save();
}
如何更好地从addRecords
函数中的数组中转义输入数据?
谢谢!
答案 0 :(得分:1)
Zend_Db_Table_Row::save()
函数,internaly使用Zend_Db_Adapter_Abstract::insert()
函数来保存数据。反过来,为您引用数据。
如果您需要构建自己的SQL查询,Zend_Db_Adapter类提供了几个引用函数供您使用。您可以在此处详细了解它们:Quoting Values and Identifiers
答案 1 :(得分:0)
据我所知,你正在以正确的方式做到这一点。如果您的表单是使用Zend_Form
制作的,则可以在表单元素上添加filters
和validators
。
我自动创建的每个表单元素都会自动获取StripTags
(删除HTML标记)和StringTrim
(删除不需要的空格)过滤器。如果您需要允许HTML,则需要将StripTags
配置为接受特定标记和属性。
在此之上,使用验证器将捕获大部分恶意内容。如果您有带数值的单选按钮,则可以添加Digit
验证器。对于字符串,Alnum
似乎给我带有重音(utf8)字符串的奇怪结果,但如果你期望基本的ASCII,它可能是一个亚军
使用Zend_Form::isValid()
会检查所有validators
是否正常,使用Zend_Form::getValues()
会自动触发所有输入filters
。由于您已经在执行此操作,因此您可能只需添加适当的filters
和validators
。
使用Zend Framework
的数据库工具将为您构建安全查询,以避免引用问题