Поскольку вы используете Zend_Form, существует валидатор, который может сделать это за вас.
См. Zend_Validate_DbNoRecordExists
Они дают пример для проверки того, что данное имя пользователя не существует в базе данных.
Вот пример из одного из моих приложений, третий валидатор проверяет, что имя пользователя еще не существует:
$this->addElement('text', 'username', array(
'label' => 'User Name:',
'required' => true,
'validators' => array('NotEmpty'),
'decorators' => $this->elementDecorators,
'validators' => array(
array('StringLength', true, array('min' => 4,
'messages' => array(
Zend_Validate_StringLength::TOO_SHORT =>
'Account username must be at least %min% characters'
)
)),
array('Regex', true, array('pattern' => '/^\w(?:[\w\d\.\-_]+)(?:\w|\d)$/',
'messages' => array(
Zend_Validate_Regex::NOT_MATCH =>
"The username contained invalid characters"
)
)),
array('Db_NoRecordExists', true, array(
'table' => 'accounts', 'field' => 'username',
'messages' => array(
Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND =>
"An account with the username '%value%' is already registered"
)
))
)
));
Кроме того, для дальнейшего использования, если вы делаете расширенную проверку, которую вы не можете сделать с помощью валидатора, вы можете добавить ошибку к определенному элементу формы, например так:
if ($something_was_wrong) {
$form->getElement('username')
->addError('Username already exists!');
}