消息:SQLSTATE [HY093]:参数号无效:混合命名和位置参数

时间:2014-03-27 07:48:59

标签: php zend-framework zend-validate

我遇到过这个我以前没见过的错误:

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('/.../...');
                }

6 C:\ xampp \ htdocs \ portal-gep-2 \ library \ Null \ Validate \ Db \ NoRecordExists.php(7):Zend_Validate_Db_NoRecordExists-> isValid('7505020152089')

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;
    }
}

1 个答案:

答案 0 :(得分:0)

有问题的表格有以下形式的构造函数:

public function __construct($formState = 'createlocal', $currentTask = null)

根据表单是更新现有记录还是新记录,它将使用自定义验证器:Null_Validate_Db_NoRecordExists

在特定情况下,您谈到表单是在现有记录上使用Db_NoRecordExists,因此我们希望在这种情况下使用其中一个构造函数参数排除特定记录(当前记录):{ {1}}。

$currentTask可以是一个数组,验证器可以使用数组变量,同时确保Record不存在(在where子句中)。但是,在最初构造表单时,不会解析变量。

因此检查$currenctTask是否包含它需要包含的内容。这个错误是你自己造成的。