NetHq Blog


A rossz legjobb kritikája az, ha megmutatjuk, hogyan kell jobban csinálni.

Zend Framework programozás alapok - adatbázisok kezelése

Nightvis, 2012.07.23 14:39
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

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.

Tartalom közösségi megosztása: