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.