请原谅我对这个问题的无知,但似乎是一个明显的解决办法并不是为了我......
我的验证工作得很好,除了当我在表单字段中输入任何字母字符时,我得到一个sql错误:
SQL Error: 1054: Unknown column 'abcde' in 'where clause'...
如你所见,我输入'abcd'作为测试..
但是,如果我输入一个数字字符并且我的验证一切正常..看来alpha值是作为列名读取的吗?
以下是我的验证规则:
...'Age' => array(
array(
'rule' => array('maxLength', 3),
array(
'rule' => 'numeric',
'allowEmpty' => true,
'message' => 'Age must be numeric.'
),
),
以下是我的控制器验证码:
if ($this->RequestHandler->isAjax()) {
if ($this->Plan->validates()) {
$this->Plan->set($this->data);
$errors = $this->Plan->invalidFields();
$this->set('errors', $errors);
} else {
$this->Plan->set($this->data);
}
}
正如您所看到的,我将错误返回到我的视图中,并且正确的错误“年龄必须是数字”。实际上确实按预期显示,但只是显示SQL错误。
感谢有关为何发生这种情况的任何见解。
答案 0 :(得分:2)
您是否阅读过手册?在CookBook中明确指出,如果要使用多个规则,则需要提供规则名称。
此外,您的数组嵌套完全错误。我不知道这是如何工作的,但无论如何,这就是你的验证应该是这样的:
var $validate = array(
'Age' => array(
'length' => array(
'rule' => array('maxLength', 3)
),
'numbers' => array(
'rule' => 'numeric',
'allowEmpty' => true,
'message' => 'Age must be numeric.'
)
)
);