Db_RecordExists and Db_NoRecordExists Zend_Validate_Db_RecordExists and Zend_Validate_Db_NoRecordExists provide a means to test whether a record exists in a given table of a database, with a given value. Supported options for Zend_Validate_Db_* The following options are supported for Zend_Validate_Db_NoRecordExists and Zend_Validate_Db_RecordExists: adapter: The database adapter which will be used for the search. exclude: Sets records which will be excluded from the search. field: The database field within this table which will be searched for the record. schema: Sets the schema which will be used for the search. table: The table which will be searched for the record. Basic usage An example of basic usage of the validators: 'users', 'field' => 'emailaddress' ) ); if ($validator->isValid($emailaddress)) { // email address appears to be valid } else { // email address is invalid; print the reasons foreach ($validator->getMessages() as $message) { echo "$message\n"; } } ]]> The above will test that a given email address is in the database table. If no record is found containing the value of $emailaddress in the specified column, then an error message is displayed. 'users', 'field' => 'username' ) ); if ($validator->isValid($username)) { // username appears to be valid } else { // username is invalid; print the reason $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> The above will test that a given username is not in the database table. If a record is found containing the value of $username in the specified column, then an error message is displayed. Excluding records Zend_Validate_Db_RecordExists and Zend_Validate_Db_NoRecordExists also provide a means to test the database, excluding a part of the table, either by providing a where clause as a string, or an array with the keys "field" and "value". When providing an array for the exclude clause, the != operator is used, so you can check the rest of a table for a value before altering a record (for example on a user profile form) getId(); $validator = new Zend_Validate_Db_NoRecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => array( 'field' => 'id', 'value' => $user_id ) ) ); if ($validator->isValid($username)) { // username appears to be valid } else { // username is invalid; print the reason $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> The above example will check the table to ensure no records other than the one where id = $user_id contains the value $username. You can also provide a string to the exclude clause so you can use an operator other than !=. This can be useful for testing against composite keys. quoteInto('email = ?', $email); $validator = new Zend_Validate_Db_RecordExists( array( 'table' => 'users', 'field' => 'username', 'exclude' => $clause ) ); if ($validator->isValid($username)) { // username appears to be valid } else { // username is invalid; print the reason $messages = $validator->getMessages(); foreach ($messages as $message) { echo "$message\n"; } } ]]> The above example will check the 'users' table to ensure that only a record with both the username $username and with the email $email is valid. Database Adapters You can also specify an adapter. This will allow you to work with applications using multiple database adapters, or where you have not set a default adapter. As in the example below: 'users', 'field' => 'id', 'adapter' => $dbAdapter ) ); ]]> Database Schemas You can specify a schema within your database for adapters such as PostgreSQL and DB/2 by simply supplying an array with table and schema keys. As in the example below: 'users', 'schema' => 'my', 'field' => 'id' ) ); ]]>