我遇到过这个我以前没见过的错误:
Message: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
参考以下代码(简化了易于阅读的功能):
if ($frm->isValid($this->_getAllParams()) || !count($frm->getMessages())) //error points to this line of an array
{
//set session with id of user
$session = new Zend_Session_Namespace('rg');
$session->userid = $this->getRequest()->getPost('id');
//update the user
$mdl->createClient($this->_getAllParams());
//add to log - do in model
$this->_redirect('/.../...');
}
class Null_Validate_Db_NoRecordExists extends Zend_Validate_Db_NoRecordExists
{
public function isValid($value)
{
$response = parent::isValid($value);//this line
if(!$response){
$this->_messages =
array(self::ERROR_RECORD_FOUND=> "Please correct this error before continuing <a href='/data-control/idnum/id/$value'>Correct Issue</a>");
}
return $response;
}
}
答案 0 :(得分:0)
有问题的表格有以下形式的构造函数:
public function __construct($formState = 'createlocal', $currentTask = null)
根据表单是更新现有记录还是新记录,它将使用自定义验证器:Null_Validate_Db_NoRecordExists
。
在特定情况下,您谈到表单是在现有记录上使用Db_NoRecordExists
,因此我们希望在这种情况下使用其中一个构造函数参数排除特定记录(当前记录):{ {1}}。
$currentTask
可以是一个数组,验证器可以使用数组变量,同时确保Record不存在(在where子句中)。但是,在最初构造表单时,不会解析变量。
因此检查$currenctTask
是否包含它需要包含的内容。这个错误是你自己造成的。