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 szerveren) 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ázis kezelő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.