As explained in the introduction, the Zend_Auth_Adapter_DbTable constructor requires an
instance of Zend_Db_Adapter_Abstract that serves as the database connection to which the
authentication adapter instance is bound. First, the database connection should be created.
The following code creates an adapter for an in-memory database, creates a simple table schema, and
inserts a row against which we can perform an authentication query later. This example requires the PDO
SQLite extension to be available:
<?php
// Create an in-memory SQLite database connection
require_once 'Zend/Db/Adapter/Pdo/Sqlite.php';
$dbAdapter = new Zend_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory:'));
// Build a simple table creation query
$sqlCreate = 'CREATE TABLE [users] ( '
. '[id] INTEGER NOT NULL PRIMARY KEY, '
. '[username] VARCHAR(50) UNIQUE NOT NULL, '
. '[password] VARCHAR(32) NULL, '
. '[real_name] VARCHAR(150) NULL)';
// Create the authentication credentials table
$dbAdapter->query($sqlCreate);
// Build a query to insert a row for which authentication may succeed
$sqlInsert = 'INSERT INTO users (username, password, real_name) '
. 'VALUES ("my_username", "my_password", "My Real Name")';
// Insert the data
$dbAdapter->query($sqlInsert);
With the database connection and table data available, an instance of
Zend_Auth_Adapter_DbTable may be created. Configuration option values may be passed to the
constructor or deferred as parameters to setter methods after instantiation:
<?php
require_once 'Zend/Auth/Adapter/DbTable.php';
// Configure the instance with constructor parameters...
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter, 'users', 'username', 'password');
// ...or configure the instance with setter methods
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
At this point, the authentication adapter instance is ready to accept authentication queries. In order
to formulate an authentication query, the input credential values are passed to the adapter prior to
calling the authenticate() method:
<?php
// Set the input credential values (e.g., from a login form)
$authAdapter->setIdentity('my_username')
->setCredential('my_password');
// Perform the authentication query, saving the result
$result = $authAdapter->authenticate();
In addition to the availability of the getIdentity() method upon the authentication result
object, Zend_Auth_Adapter_DbTable also supports retrieving the table row upon
authentication success:
<?php
// Print the identity
echo $result->getIdentity() . "\n\n";
// Print the result row
print_r($authAdapter->getResultRowObject());
/* Output:
my_username
Array
(
[id] => 1
[username] => my_username
[password] => my_password
[real_name] => My Real Name
)
*/
Since the table row contains the credential value, it is important to secure the values against
unintended access.