Az adatbázisok kezelése során zudni kell, hogy minden PDO driverrel ellátott adatbázist képes kezelni. Két osztály a Zend_Db és a Zend_Adapter osztály tartozik alapvetően ebbe a körbe. A Zend Framework a PHP PDO driverein keresztül képes kezelni az alábbi adatbáziskezelőket:
- IBM DB2 és Informix Dynamic Server (IDS), pdo_ibm PHP extension
- MySQL, a pdo_mysql PHP extension segítségével
- Microsoft SQL Server, a pdo_dblib PHP extension segítségével
- Oracle, a pdo_oci PHP extension segítségével
- PostgreSQL, using the pdo_pgsql PHP extension segítségével
- SQLite, pdo_sqlite PHP extension segítségével
További adatbázis elérési lehetőségek, amelyekhez a Zend_Db-nek van Adapter osztálya:
- MySQL, a mysqli PHP extension segítségével
- Oracle, a oci8 PHP extension segítségével
- IBM DB2 és DB2 I5, az ibm_db2 PHP extension segítségével
- Firebird (Interbase), a php_interbase PHP extension segítségével
- MSSQL - Sqlsrv adapterrel, ami támogatja az UNICODE adatok tárolását (Window sszerveren) ehhez a letölthető dolgok innen szedhetők le: SQL Natív kliens, ami kell azon a gépen, ahol a webszerver és a PHP fut és a PHP driverek innen tölthetők le. A megfelelő verziójút kell használni a PHP 5.2.x vagy 5.2, a webszerver típusától függően (Apache, modulként VC6, thread safe=TS, FastCGI esetén Non Thread Safe=NTS, IIS7 esetén VC9 és Non Thread Safe FastCGI használatával (az ajánlott).
A Zend Framework esetén a Zend_Db_Adapter jelenti az adatbázis kezelőhöz szükséges csatolót.
Hozzunk létre egy adatbáziskezelőben (a példában MySQL) egy ilyen szerkezetű táblát:
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(50) NOT NULL,
`user_name` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_name` (`user_name`)
);
Ennek a táblának készítsünk egy adatbeviteli űrlapot.
A production/controllers/UserController.php fájlban létrehozzuk a register Akciót, ami egy user felvételét jelenti. az eddig is szerkesztett fájlban hozzuk létre az alábbi metódust.
public function registerAction()
{
$request = $this->getRequest();
$this->view->assign('action',"process");
$this->view->assign('title','Member Registration');
$this->view->assign('label_fname','First Name');
$this->view->assign('label_lname','Last Name');
$this->view->assign('label_uname','User Name');
$this->view->assign('label_pass','Password');
$this->view->assign('label_submit','Register');
$this->view->assign('description','Please enter this form completely:');
}
A registerAction() függvényhez hozzá kell illeszteni az application/views/scripts/user könyvtárban a register.phtml fájlt az alábbi kóddal:
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<div id="description">
<?=$this->escape($this->description);?>
</div>
<form name="register" method="post" action="<?=$this->escape($this->action)?>">
<table>
<tr>
<td><?=$this->escape($this->label_fname)?></td>
<td><input type="text" name="first_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_lname)?></td>
<td><input type="text" name="last_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_uname)?></td>
<td><input type="text" name="user_name"></td>
</tr>
<tr>
<td><?=$this->escape($this->label_pass)?></td>
<td><input type="password" name="password"></td>
</tr>
</table>
<input type="submit" name="submit" value="<?=$this->escape($this->label_submit);?>">
</form>
<? include "footer.phtml"; ?>
A böngészőben az alábbi oldalt kell megnyitni: http://hostname/user/register
Miután készen vagyunk az űrlappal, az adatbevitelre kell egy Action készíteni.Az application/controllers/UserController.php osztályában a processAction() függvényt adjuk hozzá. Ez fogja a beérkező kérést feldolgozni.
public function processAction()
{
$params = array('host' =>'localhost',
'username' =>'root',
'password' =>'admin',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$sql = "INSERT INTO `user`
(`first_name` , `last_name` ,`user_name` ,`password`)
VALUES
('".$request->getParam('first_name')."', '".$request->getParam('last_name')."', '".$request->getParam('user_name')."', MD5('".$request->getParam('password')."'))";
$DB->query($sql);
$this->view->assign('title','Registration Process');
$this->view->assign('description','Registration succes');
}
Hozzunk létre ehhez egy VIew-t is az application/views/scripts/user/process.phtml néven
<? include "header.phtml"; ?>
<h1><?=$this->escape($this->title);?></h1>
<h2><?=$this->escape($this->description);?></h2>
<a href="list">Member List</a>
<? include "footer.phtml"; ?>
Egyéb adatbeviteli lehetőségek
A hagyományos SQL alapú adatbevitelt már láttuk. Ennek alternatívájaként lehet használni az alábbi processAction() függvényt:
public function processAction()
{
$params = array(
'host' =>'localhost',
'username' =>'root',
'password' =>'admin',
'dbname' =>'zend'
);
$DB = new Zend_Db_Adapter_Pdo_Mysql($params);
$request = $this->getRequest();
$data = array(
'first_name' => $request->getParam('first_name'),
'last_name' => $request->getParam('last_name'),
'user_name' => $request->getParam('user_name'),
'password' => md5($request->getParam('password'))
);
$DB->insert('user', $data);
$this->view->assign('title','Registration Process');
$this->view->assign('description','Registration succes');
}
Nyilván mind a két esetben az adatbázis kapcsolathoz szükséges paraméterek itt be vannak drótozva, de később meglátjuk, hogyan lehet ezeket a paramétereket módosítani és mondjuk ini fájlokból betölteni az adatokat.