Exercice 1
1) Créez la base de données mysql zendbdd en utilisant le script SQL de l'annexe 1
2) Créez l'utilisateur zenduser avec pour mot de passe qp56 ayant les droits nécessaires pour accéder à la base de données zendbdd
3) Configurez le fichier /www/htdocs/examples/ZendConfig.ini afin de connecter vos scripts PHP avec la base de données zendbdd via l'utilisateur zenduser
Exercice 2
1) Créez le fichier /www/htdocs/examples/ZendDB_fetchAll.php et exécutez la requête SELECT userNom, userPrenom FROM user en utilisant la méthode fetchAll
Exercice 3
1) Créez le fichier /www/htdocs/examples/ZendDB_fetchOne.php et exécutez la requête SELECT userPrenom FROM user WHERE userNom='Danilo' en utilisant la méthode fetchOne
Exercice 4
1) Créez le fichier /www/htdocs/examples/ZendDB_fetchRow.php et exécutez la requête qui permet d'afficher les userNom et userPrenom de 3 utilisateurs dans une boucle for en utilisant la méthode fetchRow
Exercice 5
1) Dans le fichier /www/htdocs/examples/ZendDB_insert.php et en utilisant la méthode insert, insérez le film Skyfall ayant obtenu 6954203 entrées au Box Office dans la table film
Exercice 6
1) Dans le fichier /www/htdocs/examples/ZendDB_update.php et en utilisant la méthode update, définissez l'utilisateur ayant pour userID 1 en tant qu'administrateur en donnant la valeur 1 au champ userIsAdmin
Exercice 7
1) Dans le fichier /www/htdocs/examples/ZendDB_delete.php et en utilisant la méthode delete, supprimez le film ayant pour filmID 1
Exercice 8
1) Dans le fichier /www/htdocs/examples/ZendDB_Abstract.php et en utilisant la class Zend_Db_Table_Abstract créez les modèles TUser et TFilm des tables user et film
2) Utilisez le modèle TUser pour afficher tous les noms des utilisateurs de la table user.
Exercice 9
1) Dans le fichier /www/htdocs/examples/ZendDB_AbstractSelect_SQL.php et en utilisant le modèle TUser, exécuter la requête SELECT userPrenom FROM user afin de récupérer uniquement les prénoms des utilisateurs.
Exercice 10
1) Dans le fichier /www/htdocs/examples/ZendDB_AbstractSelect_find.php utilisez la méthode find de TUser pour afficher le nom de l'utilisateur 1
Exercice 11
1) En utilisant le modèle TUser, changez le nom de l'utilisateur ayant pour clé primaire 2 en "Bond"
Exercice 12
1) Toujours en utilisant le modèle TUser, insérez le nouveau membre ayant pour nom Cruz et pour prénom Penélope
Exercice 13
1) Ecrivez la fonction InfosUser dans la méthode TUser qui permet d'afficher le nom et le prénom de l'utilisateur dont la clé primaire (userID) est passé en paramètre de la fonction
Exercice 14
1) Ecrivez la fonction recupAdmin dans la méthode TUser qui permet d'afficher le nom des administrateurs
Annexe 1
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Base de données: `zendbdd` -- -- -------------------------------------------------------- -- -- Structure de la table `film` -- CREATE TABLE `film` ( `filmID` int(11) NOT NULL AUTO_INCREMENT, `filmTitre` varchar(100) NOT NULL, `filmBoxOfficeFr` int(11) NOT NULL, PRIMARY KEY (`filmID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Contenu de la table `film` -- INSERT INTO `film` (`filmID`, `filmTitre`, `filmBoxOfficeFr`) VALUES (1, 'The Ghost Writer', 1047958); -- -------------------------------------------------------- -- -- Structure de la table `user` -- CREATE TABLE `user` ( `userID` int(11) NOT NULL AUTO_INCREMENT, `userNom` varchar(50) NOT NULL, `userPrenom` varchar(50) NOT NULL, `userIsAdmin` int(1) NOT NULL, PRIMARY KEY (`userID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Contenu de la table `user` -- INSERT INTO `user` (`userID`, `userNom`, `userPrenom`, `userIsAdmin`) VALUES (1, 'Danilo', 'Paul', 0), (2, 'Desplat', 'Alexandre', 0), (3, 'Lewis', 'Damian', 0), (4, 'Cranston', 'Bryan', 0), (5, 'Norton', 'Edward', 0);
Correction de l'exercice 1
Zend_Db et ses autres sous classes proposent une interface de connexion aux bases de données permettant de se connecter et d’interagir avec la plupart des SGBD du marché.
Reprenons notre ZendConfig.ini
$ nano /www/htdocs/examples/ZendConfig.ini
On indique nos paramètres en utilisant la structure suivante :
[app] database.adapter = pdo_mysql database.params.dbname = zendbdd database.params.charset = utf8 [dev : app] database.params.host = localhost database.params.username = zenduser database.params.password = qp56 [prod : app] database.params.host = my.prod.host database.params.username = zenduser database.params.password = qp56
On enregistre et on quitte
Correction de l'exercice 2
La méthode fetchAll permet de récupérer tous les résultats de la requête.
On créé notre nouveau fichier
$ nano /www/htdocs/examples/ZendDB_fetchAll.php
Et on y place notre script :
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); // Chargement de notre fichier de configuration $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); // On créé le lien avec la base de données $db = Zend_Db::factory($config->database); // On lance notre requête via un fetchAll $query = "SELECT userNom, userPrenom FROM user"; $result = $db->fetchAll($query); // On affiche le résultat Zend_Debug::dump($result);
Correction de l'exercice 3
La méthode fetchOne permet de retourner la première colonne du premier jeu de résultats.
$ nano /www/htdocs/examples/ZendDB_fetchOne.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); // Chargement de notre fichier de configuration $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); // On créé le lien avec la base de données $db = Zend_Db::factory($config->database); // On lance notre requête via un fetchOne $query = "SELECT userPrenom FROM user WHERE userNom='Danilo'"; $result = $db->fetchOne($query); // On affiche notre résultat echo $result;
Correction de l'exercice 4
La méthode fetchRow nous permet de récupérer le premier jeu de résultat.
$ nano /www/htdocs/examples/ZendDB_fetchRow.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // Notre requête $query = "SELECT userPrenom, userNom FROM user WHERE userID=:id"; for ($i = 1 ; $i <= 3 ; $i++) { // On défini notre paramètre $binds = array('id'=>$i); // On récupére notre résultat dans un fetchRow $result = $db->fetchRow($query, $binds); // On affiche notre résultat echo $result['userPrenom'].' '.$result['userNom'].'
'; }
Correction de l'exercice 5
$ nano /www/htdocs/examples/ZendDB_insert.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); try { $data = array('filmTitre' => 'Skyfall', 'filmBoxOfficeFr' => 6954203); $count = $db->insert("film", $data); echo $count . " film(s) inséré(s)"; } catch (Zend_Db_Exception $e) { printf("erreur de requête : %s", $e->getMessage()); }
Correction de l'exercice 6
$ nano /www/htdocs/examples/ZendDB_update.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); $updated = $db->update("user", array('userIsAdmin' => 1), 'userID=1'); echo $updated . " enregistrement(s) affecté(s)";
Correction de l'exercice 7
$ nano /www/htdocs/examples/ZendDB_delete.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); $conditions = array("filmID=1"); $deleted = $db->delete("film", $conditions); echo $deleted . " enregistrement(s) supprimé(s)";
Correction de l'exercice 8
$ nano /www/htdocs/examples/ZendDB_Abstract.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // $db est l’objet de connexion Zend_Db_Adapter Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Modèle associé à la table user */ class TUser extends Zend_Db_Table_Abstract { protected $_name = 'user'; protected $_primary = 'userID'; } /** * Modèle associé à la table film */ class TFilm extends Zend_Db_Table_Abstract { protected $_name = 'film'; protected $_primary = 'filmID'; } // On créé notre objet $table = new TUser; // On place nos utilisateurs dans la variable $users $users = $table->fetchAll(); // On affiche les utilisateurs par le biais d'un foreach foreach ($users as $user) { echo $user->userNom.'</br>'; }
Correction de l'exercice 9
Par défaut fetchAll() utilise une requête de type SELECT *. Ainsi le résultat mis dans $users est un Rowset.
Pour sélectionner nous même les colonnes et les conditions que l'on souhaite, nous pouvons utiliser une requête SQL :
$ nano /www/htdocs/examples/ZendDB_AbstractSelect_SQL.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // $db est l’objet de connexion Zend_Db_Adapter Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Modèle associé à la table user */ class TUser extends Zend_Db_Table_Abstract { protected $_name = 'user'; protected $_primary = 'userID'; } $table = new TUser; $sql = "SELECT userPrenom FROM user"; $users = $table->getAdapter()->fetchAll($sql, null, Zend_Db::FETCH_OBJ); foreach ($users as $user) { echo $user->userPrenom.'</br>'; }
Zend_Db_Table_Select est verrouillé sur la table qui lui a donné naissance (via la méthode select()). Il n’est pas possible avec cet objet de sélectionner des colonnes ne faisant pas partie de la table de référence. Il est en revanche possible de créer des jointures.
Dans le cas où l'on souhaite qu'un seul enregistrement nous soit retourné, l'utilisation de fetchRow est recommandé et notre code aurait été le suivant :
$table = new TUser; $sql = "SELECT userPrenom FROM user WHERE userID = 1"; $user = $table->getAdapter()->fetchRow($sql, null, Zend_Db::FETCH_OBJ); Zend_Debug::dump($user); echo $user->userPrenom.'</br>';
Correction de l'exercice 10
$ nano /www/htdocs/examples/ZendDB_AbstractSelect_find.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // $db est l’objet de connexion Zend_Db_Adapter Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Modèle associé à la table user */ class TUser extends Zend_Db_Table_Abstract { protected $_name = 'user'; protected $_primary = 'userID'; } $table = new TUser; $membres = $table->find(1); $membre = $membres->current(); // Affiche le nom de l’utilisateur ayant la clé primaire (userID) 1 echo $membre->userNom;
Il est aussi possible de passer un tableau d’entiers à la méthode find(), elle cherchera alors les enregistrements dont les clés primaires sont celles spécifiées.
Correction de l'exercice 11
Modifions le nom de l’occurrence ayant pour clé primaire 2 :
$table = new TUser; $membres = $table->find(2); $membre = $membres->current(); // Affiche le nom de l’utilisateur ayant la clé primaire (userID) 2 $membre->userNom = "Bond"; $membre->save();
Correction de l'exercice 12
Pour enregistrer une nouvelle occurrence :
$table = new TUser; // Création d’un objet Row vierge $nvoMembre = $table->createRow(); // Remplissage de l’objet créé $nvoMembre->userPrenom = 'Penélope'; $nvoMembre->userNom = 'Cruz'; $nvoMembre->save();
Correction de l'exercice 13
$ nano /www/htdocs/examples/ZendDB_AbstractSelect_methode.php
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // $db est l’objet de connexion Zend_Db_Adapter Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Modèle associé à la table user */ class TUser extends Zend_Db_Table_Abstract { protected $_name = 'user'; protected $_primary = 'userID'; public function InfosUser ($pID) { $membres = $this->find($pID); $membre = $membres->current(); return $membre->userPrenom.' '.$membre->userNom.'<br/>'; } } $table = new TUser; echo $table -> InfosUser(2);
Correction de l'exercice 14
<?php header('Content-type: text/html; charset=utf-8'); require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->setFallbackAutoloader(true); $configFile = dirname(__FILE__) . '/ZendConfig.ini'; $config = new Zend_Config_Ini($configFile, 'dev'); $db = Zend_Db::factory($config->database); // $db est l’objet de connexion Zend_Db_Adapter Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Modèle associé à la table user */ class TUser extends Zend_Db_Table_Abstract { protected $_name = 'user'; protected $_primary = 'userID'; public function InfosUser ($pID) { $membres = $this->find($pID); $membre = $membres->current(); return $membre->userPrenom.' '.$membre->userNom.'</br>'; } public function recupAdmin () { $sql = "SELECT userNom FROM user WHERE userIsAdmin = 1"; $user = $this->getAdapter()->fetchAll($sql, null, Zend_Db::FETCH_OBJ); return $user; } } $table = new TUser; $users = $table -> recupAdmin(); foreach ($users as $user) { echo $user->userNom.'</br>'; }
Merci, exactement ce qu'il me fallait ;)
RépondreSupprimer