• Aucun résultat trouvé

Développement Web (PDO)

N/A
N/A
Protected

Academic year: 2022

Partager "Développement Web (PDO)"

Copied!
5
0
0

Texte intégral

(1)PHP. Base de données. PDO. PDO PDO (PHP Data Objects) est une interface pour accéder à une base de données depuis PHP. Elle gère la connexion, l’envoie des requêtes, la déconnexion à la base de données. Elle permet de changer plus facilement de système de gestion de bases de données.. Développement Web 2 Bertrand Estellon. Ouverture de la base :. Aix-Marseille Université. <? $dbHost = $_SERVER['dbHost']; $dbBd = $_SERVER['dbBd']; $dbPass = $_SERVER['dbPass']; $dbLogin = $_SERVER['dbLogin']; $url = 'mysql:host='.$dbHost.';dbname='.$dbBd; $db = new PDO($url, $dbLogin, $dbPass); if (!$db) die("impossible d'ouvrir la base de données."); $this->createDataBase(); ?>. April 1, 2014. ... Bertrand Estellon (AMU) PHP. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... Développement Web 2. . ... April 1, 2014. Base de données. . ... . ... . ... . ... 1 / 436. Bertrand Estellon (AMU). Les requêtes et fonctions utiles. PHP. PDO. Injections SQL. Une fois l’instance de PDO construite, vous effectuez des requêtes avec :. Le code suivant :. ▶ ▶. $db->exec($request) : pour modifier la base de données $db->query($request) : pour extraire des données de la base. <? $db->exec("CREATE TABLE IF NOT EXISTS users (". " nickname char(20),". " password char(50)". ");"); ?>. .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... . ... April 1, 2014. Base de données. . ... . ... . ... .. 164 / 436. Les requêtes et fonctions utiles. exécute la requête SQL suivante : UPDATE users SET password="...." WHERE nickname="aa"; DELETE FROM users; SELECT * FROM users WHERE nickname="";. <? $res = $db->exec('UPDATE users SET password="'. md5($password).'" WHERE nickname="'.$nickname.'";'); echo "nombre de lignes modifiees = $res"; ?> <? $res = $db->query("select nickname from users;"); ?> ... Développement Web 2. . ... <? $nickname = 'aa"; DELETE FROM users; '. 'SELECT * FROM users WHERE nickname="'; $password = "truc"; $res = $db->exec('UPDATE users SET password="'. md5($password).'" WHERE nickname="'.$nickname.'";'); ?>. Exemples :. Bertrand Estellon (AMU). . ... Développement Web 2. . ... . ... .. Protection contre les injections SQL :. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 165 / 436. .. <? $r = $db->prepare('UPDATE users SET password = ? '. 'WHERE nickname = ?'); $r->execute(array(md5($password), $nickname)); ?> ... Bertrand Estellon (AMU). Développement Web 2. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 166 / 436. ..

(2) PHP. Base de données. Les requêtes et fonctions utiles. PHP. PDO. Base de données. Les requêtes et fonctions utiles. PDO. Pour faire une requête SQL :. Pour mettre toutes les lignes dans un tableau :. <? $res = $db->query("select * from sondages"); var_dump($res); /* affiche 'object(PDOStatement)#2 (1) { ["queryString"]=> string(19) "select * from sondages" }' */ ?>. <? echo "nombre de lignes : ".!+$res->rowCount()+!."\n"; ?>. <? $res = $db->query("select * from sondages"); $lignes = !+$res->fetchAll();+! foreach ($lignes as $ligne) { echo $ligne['createur']. " pose la question : ". $ligne['question']."\n"; } ?>. Pour parcourir les lignes :. Voir aussi, dans la classe PDOStatement, les méthodes:. Pour connaître le nombre de lignes :. <? $res = $db->query("select * from sondages"); while ($ligne = !+$res->fetch()+!) { echo $ligne['createur']. " pose la question : ". $ligne['question']."\n"; } ?> ... Bertrand Estellon (AMU) PHP. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... Développement Web 2. . ... April 1, 2014. Base de données. . ... . ... . ... ▶. bindColumn : attache une variable à une colonne. ▶. errorInfo : information d’erreur. ▶. fetchColumn : récupère la valeur dans une colonne donnée. ▶. closeCursor : ferme le curseur. . ... 167 / 436. Bertrand Estellon (AMU). Les requêtes et fonctions utiles. PHP. PDO. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... Développement Web 2. . ... April 1, 2014. Base de données. . ... . ... . ... .. 168 / 436. Les requêtes et fonctions utiles. Base de données du projet. Voir aussi, dans la classe PDO, les méthodes: ▶ ▶ ▶ ▶ ▶ ▶ ▶. beginTransaction : démarre une transaction commit : valide une transaction rollback : annule une transaction errorInfo : Retourne les informations associées à l’erreur errorCode : Retourne le SQLSTATE associé avec la dernière opération prepare : Prépare une requête à l’exécution et retourne un objet quote : Protège une chaîne pour l’utiliser dans une requête SQL PDO. Les trois tables utilisées dans le projet : users(nickname char(20), password char(50)); surveys(id integer primary key autoincrement, owner char(20), question char(255)); responses(id integer primary key autoincrement, id_survey integer, title char(255), count integer);. <? $string = 'Chaine \' particulière'; print "non échappée : $string\n"; print "échappée :" . $bd->quote($string) . "\n"; ?>. Chaine non échappée : Chaine ’ particulière Chaine échappée : ’Chaine ” particulière’ Bertrand Estellon (AMU). Développement Web 2. ... . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 169 / 436. . ... Bertrand Estellon (AMU). Développement Web 2. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 170 / 436. ..

(3) PHP. Base de données. Les requêtes et fonctions utiles. PHP. Exemple : sauvegarde d’un sondage. Base de données. Les requêtes et fonctions utiles. La classe Database. <? public function saveSurvey(&$survey) { $this->connection->beginTransaction();. <? class Database { private $connection; public function __construct() { ... }. $query = $this->connection->prepare("INSERT INTO surveys(owner,question)". "VALUES (?,?)"); if ($query===false) { $this->connection->rollback(); return false; }. $id = $this->connection->lastInsertId(); $survey->setId($id);. public public public public public public public. $responses = &$survey->getResponses(); foreach ($responses as &$response) { if ($this->saveResponse($response)===false) { $this->connection->rollback(); return false; } } $this->connection->commit(); return true;. private private private private private private private. $r = $query->execute(array($survey->getOwner(), $survey->getQuestion())); if ($r === false) { $this->connection->rollback(); return false; }. function function function function function function function. checkPassword($nickname, $password) { ... } addUser($nickname, $password) { ... } updateUser($nickname, $password) { ... } saveSurvey(&$survey) { ... } loadSurveysByOwner($owner) { ... } loadSurveysByKeyword($keyword) { ... } vote($id) { ... }. function function function function function function function. createDataBase() { ... } checkNicknameValidity($nickname) { ... } checkPasswordValidity($password) { ... } checkNicknameAvailability($nickname) { ... } saveResponse(&$response) { ... } loadSurveys($arraySurveys) { ... } loadResponses($survey, $arrayResponses) { ... }. } ?>. } ?>. ... Bertrand Estellon (AMU) PHP. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... Développement Web 2. . ... April 1, 2014. Base de données. . ... . ... . ... . ... 171 / 436. Bertrand Estellon (AMU). Mapping objet-relationnel (ORM). . ... PHP. Base de données. Les besoins : ▶ Sauvegarde simple des objets en base de données :. Initialisation de la connexion à la base de données :. Bertrand Estellon (AMU). Développement Web 2. . ... . ... . ... .. 172 / 436. Pour vider la base de données :. Création automatique des tables; ▶ Chargement des objets; ▶ Gestion des relations entre les objets/enregistrements; ▶ ... Quelques solutions en PHP : ▶ Propel ▶ Doctrine ▶ Redbean ▶ ... ▶. .. . ... <? $dbHost = $_SERVER['dbHost']; $dbBd = $_SERVER['dbBd']; $dbPass = $_SERVER['dbPass']; $dbLogin = $_SERVER['dbLogin']; $url = 'mysql:host='.$dbHost.';dbname='.$dbBd; R::setup($url, $dbLogin, $dbPass); ?>. <? $user = new User(); $user->nickname = "bob"; $user->password = md5("truc"); $user->save(); ?>. . ... . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... Mapping objet-relationnel (ORM). Redbean – Introduction. . ... .. April 1, 2014. Mapping objet-relationnel (ORM). ... . ... Développement Web 2. <? R::nuke(); ?>. Création et sauvegarde d’un bean : <? $user = R::dispense('user'); $user->nickname = $nickname; $user->password = $password; R::store($user);. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 173 / 436. .. ?> ... Bertrand Estellon (AMU). Développement Web 2. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 174 / 436. ..

(4) PHP. Base de données. Mapping objet-relationnel (ORM). PHP. Redbean – Chargement des beans. Base de données. Mapping objet-relationnel (ORM). Redbean – One-to-many. Chargement d’un bean à partir de son identifiant : Association “one-to-many” entre les sondages et les réponses :. <? $user = R::load('user', $_SESSION['id']); /* retourne NULL si le bean n'a pas été trouvé. */. <? $survey = R::dispense('survey'); $survey->owner = $_SESSION['id']; $survey->question = $question;. ?>. Charger un bean dans la base de données à partir d’une requête :. $survey-> ownResponse = array(); foreach ($titles as $title) { $response = R::dispense('response'); $response->title = $title; $response->count = 0; $survey->ownResponse[] = $response; /* Le nom du champ est important ! */ }. <? $user = R::findOne('user', 'nickname = ? AND password = ?', array($nickname, $password)); /* retourne NULL si le bean n'a pas été trouvé. */ ?>. Charger plusieurs beans : <?. R::store($survey); /* Tout est sauvé */ ?>. $surveys = R::find('survey', 'question like ?', array('%'.$keyword.'%')); /* retourne un tableau. */ ?> ... Bertrand Estellon (AMU). . ... . ... .. Développement Web 2. PHP. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... . ... April 1, 2014. Base de données. . ... . ... . ... . ... 175 / 436. Bertrand Estellon (AMU). Mapping objet-relationnel (ORM). Redbean – One-to-many Le chargement de l’intégralité du sondage est automatique : <? $surveys = R::find('survey', 'owner = ?', array($_SESSION['id'])); foreach ($surveys as &$survey) { $total = 0; foreach ($survey->ownResponse as $r) $total += $r->count; if ($total===0) { foreach ($survey->ownResponse as &$r) $r->percentage = 0; } else { foreach ($survey->ownResponse as &$r) $r->percentage = (100*$r->count)/$total; } } ?>. ... Bertrand Estellon (AMU). Développement Web 2. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 177 / 436. .. Développement Web 2. . ... . ... .. . . . . . . . . . . . . .. .. .. .. .. .. .. .. .. .. .. .. ... April 1, 2014. . ... . ... . ... . ... 176 / 436. ..

(5) Cliquez ici pour telecharger le PDF complet.

(6)

Références

Documents relatifs

C'est d'ailleurs cette idée « naturelle » qui semble venir spontanément à l'esprit des élèves qui connaissent déjà la notion de médiane et à qui l'on demande de partager

THEOREM 2.. lattice) isomorphism between two Z-semisimple f-rings induces a homeomorphism between their spaces of maximal Z-ideals [4] (resp.. (3) implies(2) because any

Correction proposée par Mme Lamia & Mme Hana... Correction proposée par Mme Lamia &

Instead, our algorithm is designed to be practically faster, on multi- core architectures, than the other algorithms that are usually implemented for the same purpose of

sorting and array transposition algorithms, discrete Fourier transforms (DFTs), the Cooley–Tukey algorithm, FFT multiplication and convolution, Bluestein’s chirp transform,

Keywords: computer arithmetic, integer dichotomy &amp; trichotomy, sparse &amp; dense struc- tures, dictionary package, digital search tree, minimal acyclic automata, binary

(*) In connection with this, the following works should be also mentioned : the well known memoir [HL] by Hardy and Littlewood which is rather closed to the matter of our study and

Evaluation / Interpolation algorithms Karatsuba, Toom-3, Toom-Cook: Fixed size eval./interp.. scheme + recursion Fast Fourier Transform: Full