Cours 420-2D7-LL Développement web

*** lundi, 20 avril 2026 --> semaine 12 !!! ***



Semaine 4

Base de données

Télécharger : 1 - Base de données.docx

Une base de données, usuellement abrégée en BD ou BDD, est un ensemble structuré et organisé permettant le stockage de grandes quantités d'informations afin d'en faciliter l'exploitation (ajout, mise à jour, recherche de données).

Une base de données se traduit physiquement par un ensemble de fichiers sur disque.

Base de données relationnelle

Principe

Le concept permet de stocker et d’organiser une grande quantité d’information. Les SGBD permettent de naviguer dans ces données et d’extraire (ou de mettre à jour) les informations voulues au moyen d'une requête.

Dans les relations, il est possible de définir deux types de clés :

clé primaire 

permet d’identifier un et un seul n-uplet (par exemple le numéro de sécurité sociale).

clé étrangère 

c’est un attribut d’une relation qui est clé primaire dans une autre relation. Elle permet donc de lier deux relations entre elles.

Pour accéder aux données, on utilise différents opérateurs logiques, notamment la sélection et la projection, mais aussi les jointures (dont il existe différents types).

Système de gestion de base de données

La gestion et l'accès à une base de données sont assurés par un ensemble de programmes qui constituent le Système de gestion de base de données (SGBD).

Fonctions d'un SGBD

 

  • Mise à jour des données

 

La recherche des données est un point crucial. Il faut que le SGBD puisse restituer les données rapidement.

MySQL

MySQL est un gestionnaire de base de données libre (plus ou moins depuis le rachat par Oracle). Il est très utilisé dans les projets libres et dans le milieu industriel.

Une session Mysql dans la Console de Linux.

Caractéristiques

MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées. Il est multi-thread, robuste et multi-utilisateurs. C'est un logiciel libre développé sous double licence en fonction de l'utilisation qui en est faite: dans un produit libre (open-source) ou dans un produit propriétaire. Dans ce dernier cas, la license est payante, sinon elle est libre.

Systèmes supportés

MySQL fonctionne sur beaucoup de plates-formes différentes, incluant AIX, BSDi, FreeBSD, HP-UX, Linux, Mac OS X, Netware, NetBSD, OpenBSD, OS/2 Warp, SGI Irix, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64 Unix, Windows 95, 98, NT, 2000 et XP.

Les bases de données sont accessibles en utilisant les langages de programmation C, C++, C#, Delphi / Kylix, Eiffel, Java, Perl, PHP, Python, Ruby et Tcl ; une API spécifique est disponible pour chacun d'entre eux. Une interface ODBC appelée MyODBC est aussi disponible. En Java, MySQL peut être utilisé de façon transparente avec le standard JDO.

Utilisation

MySQL fait partie du quatuor LAMP : Linux, Apache, MySQL, PHP. Le couple PHP/MySQL est très utilisé sur Internet et proposé par la majorité des hébergeurs.

Wikipédia utilise MySQL.

Dénomination

MySQL est l'œuvre d'une société suédoise, MySQL AB, fondée par David Axmark, Allan Larsson et Michael Widenius. Le nom MySQL vient de leur habitude à préfixer par « My » une grande partie de leurs dossiers, bibliothèques et outils. La fille de Michael Widenius était surnommée « My ».

« MySQL » se prononce officiellement comme "My Ess Que Ell" (en anglais), ce qui donne "Maille Esse Cu Elle" en phonétique française.

Le nom du logo de MySQL (le dauphin) Sakila, a été choisi par les créateurs de MySQL sur la base d'un concours. Il a été proposé par Ambrose Twebaze, développeur du Swaziland, en Afrique. D'après Ambrose, le nom Sakila puise ses origines du SiSwati, la langue locale du Swaziland.

Historique

La première version de MySQL est apparue le 23 mai 1995.

 

 

Structured Query Language

Structured query language (SQL), ou langage structuré de requêtes, est un pseudo-langage informatique (de type requête) standard et normalisé, destiné à interroger ou manipuler une base de données relationnelle .

En 1979, Relational Software, Inc. (actuellement Oracle Corporation) présenta la première version commercialement disponible de SQL, rapidement imité par d'autres fournisseurs.

SQL a été adopté comme recommandation par l'institut de normalisation américaine (ANSI) en 1986, puis comme norme internationale par l'ISO en 1987 sous le nom de ISO/CEI 9075 - Technologies de l'information - Langages de base de données - SQL.

La norme internationale SQL est passée par un certain nombre de révisions :

 

Réf. : http://fr.wikipedia.org/
 
 

 

MYSQL dans Terminal

Télécharger : 2 - MySQL_CommandeSQL.docx

 

/etc/init.d/mysql start

/etc/init.d/mysql stop

/etc/init.d/mysql restart

 

mysql -u root -p *******

mysql>_

show databases;

connect mysql;

show tables;

exit;

quit;

 

mysql> update user set Password=password('grievous') where user='root';

Query OK, 2 rows affected (0.08 sec)

Rows matched: 2  Changed: 2  Warnings: 0

 

[root@localhost root]# mysql -p

Enter password:

 

select * from user;

describe user;

 

create database essai;

connect essai;

 

mysql> create table personne

    -> (noid int(4) NOT NULL,

    -> prenom varchar(50),

    -> nom varchar(50),

    -> PRIMARY KEY (noid)

    -> )TYPE = InnoDB;

              

//voir Innodb (pour intégrité, clé étrangaire...) vs MyIsam

 

drop table essai;

 

mysql> describe personne;

+--------+-------------+------+-----+---------+-------+

| Field  | Type        | Null | Key | Default | Extra |

+--------+-------------+------+-----+---------+-------+

| noid   | int(4)      |      | PRI | 0       |       |

| prenom | varchar(50) | YES  |     | NULL    |       |

| nom    | varchar(50) | YES  |     | NULL    |       |

+--------+-------------+------+-----+---------+-------+

3 rows in set (0.04 sec)

 

mysql> INSERT INTO personne(noid,prenom,nom) VALUES ('0008','Anakin','Skywalker'); Query OK, 1 row affected (0.00 sec)

 

mysql> select * from personne;

+------+--------+-----------+

| noid | prenom | nom       |

+------+--------+-----------+

|    6 | Boba2  | Feet2     |

|    8 | Anakin | Skywalker |

+------+--------+-----------+

2 rows in set (0.04 sec)

 

mysql> delete from personne

    -> where (noid = 8);

Query OK, 1 row affected (0.11 sec)

 

mysql> delete from personne

    -> where (noid > 0);

Query OK, 1 row affected (0.00 sec)

 

mysql> alter table personne

    -> modify

    -> prenom varchar(55);

Query OK, 0 rows affected (0.17 sec)

 

 

 

 

 

mysql> alter table personne

    -> add

    -> description varchar(80);

 

mysql> update personne

    -> set prenom = 'Boba', nom = 'Feet'

    -> where noid = 6;

Query OK, 1 row affected (0.04 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

mysql> select * from personne

    -> where noid < 8 and noid >6

    -> order by prenom;

+------+--------+-------+-------------+

| noid | prenom | nom   | description |

+------+--------+-------+-------------+

|    7 | Darth  | Vador | NULL        |

+------+--------+-------+-------------+

1 row in set (0.00 sec)

 

##### http://dev.mysql.com/doc/mysql/fr/alter-table.html ####

 

mysql> select * from personne

    -> where noid < 8 and noid >6

    -> order by prenom;

+------+--------+-------+-------------+

| noid | prenom | nom   | description |

+------+--------+-------+-------------+

|    7 | Darth  | Vador | NULL        |

+------+--------+-------+-------------+

1 row in set (0.00 sec)

 

mysql> alter table personne

    -> add

    -> image varchar(30),

    -> add notype varchar(4);

Query OK, 0 rows affected (0.04 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

 

mysql> alter table personne

    -> drop description;

 

Pour clé étrangère

ALTER TABLE personne ADD CONSTRAINT toto_totoune

FOREIGN KEY ( notype ) REFERENCES sorte( notype );

 

 

[root@localhost root]# mysqldump -p essai > essai.txt

Enter password:

 

[root@localhost root]# mysqldump -p essai < essai.txt

Enter password:

 

mysql> source essai.txt;

 

drop database essai;

Query OK, 0 rows affected (0.00 sec)

 

Ensuite, effacer le dossier de la BD dans /var/lib/mysql

 

Installer phpMyAdmin (Gestion graphique de mysql)

apt-get install phpmyadmin

pour utiliser: http://localhost/phpmyadmin/

 phpMyAdmin – How to Create a Database? - PHPpot

 

Installer Webmin (Gestion graphique du serveur)

Telecharger la version 1.3 (webmin.com)

apt-get install libio-pty-perl

dpkg --install webmin_1.300_all.deb

pour utiliser: https://localhost:10000/

 

 

 


 

MySQL et PHP sous Apache

Télécharger : 3 - Note de cours MySQL et PHP.docx

Ref.: http://php.net/manual/fr/mysqlinfo.api.choosing.php

Choisir une API

PHP offre 3 APIs différentes pour se connecter à MySQL. Ci-dessous, vous trouverez les APIs fournies par les extensions mysql, mysqli et PDO. Chaque exemple de code crée une connexion à un serveur MySQL s'exécutant sur le domaine "example.com", en utilisant le nom d'utilisateur "user", le mot de passe "password". Et une requête est exécutée pour saluer l'utilisateur.

Exemple #1 Comparaison des 3 APIs MySQL

<?php
// mysqli
$mysqli = new mysqli("example.com""user""password""database");
$result $mysqli->query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
$row $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database''user''password');
$statement $pdo->query("SELECT 'Bonjour, cher utilisateur de MySQL !' AS _message FROM DUAL");
$row $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

 

API recommandé

Il est recommandé d'utiliser soit l'extension mysqli, soit l'extension PDO_MySQL. Il n'est pas recommandé d'utiliser l'ancienne extension mysql pour de nouveaux développements sachant qu'elle est obsolète depuis PHP 5.5.0, et sera supprimée dans un futur proche. Une matrice de comparaison détaillant les fonctionnalités est fournie ci-dessous. La performance globale des 3 extensions peut être considérée comme identique. Malgré tout, la performance de l'extension constitue seulement une fraction du temps total d'exécution d'une requête web PHP. Aussi, l'impact est inférieur à 0.1%.

 

Pour PDO:

ref.: https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2

Pour MySQLi:

Réf.: https://openclassrooms.com/courses/maitrisez-mysqli-sans-poo

MySQLi permet de communiquer avec une base de données MySQL.

Mais pourquoi utiliser MySQLi ?

Je dirais que c'est juste une histoire de goûts.
On peut utiliser MySQLi sans passer par la programmation orientée objet, ce qui peut être un avantage pour ceux qui ne connaissent rien à la POO en PHP (comme moi ).
Peut-être que par la suite, certains trouveront que MySQLi est plus simple à utiliser que la technique enseignée par M@teo21 dans son tutoriel PHP.

Pour suivre ce tutoriel, vous devez avoir lu le tutoriel PHP officiel du site, même la partie avec MySQL.

Nous allons donc apprendre à nous servir de MySQLi.
Ah ! Au passage, vous remarquerez que toute les fonctions de MySQLi commencent par… mysqli_ !

Se connecter à la base de données

Pour se connecter à MySQL, on va utiliser cette fonction :

<?php

$bdd = new mysqli('serveur', 'utilisateur', 'mot_de_passe', 'base');

?>

 

  • $bdd correspond à une variable où seront stockées les informations de la base de données. On s'en servira souvent.
  • serveur correspond au serveur SQL.
  • utilisateur correspond au nom d'utilisateur pour se connecter au serveur SQL.
  • mot_de_passe correspond au mot de passe pour le serveur SQL !
  • base correspond à votre base de données du serveur SQL.

 

Exemple:

    $mysqli = new mysqli("localhost", "mers", "grievous", "essai");

 

Dans cet exemple, MySQLi se connecte au serveur local.

Je vous conseille de mettre ce code dans un fichier connexion_sql.php, que vous insérerez ensuite dans chaque fichier qui travaille avec SQL.
D'ailleurs, j'espère que vous faisiez déjà comme ça !

Une fois que la connexion est établie, nous pouvons passer à nos premières requêtes...

Les requêtes simples

Nous allons apprendre à gérer les requêtes simples.

Qu'appelles-tu requêtes simples ?

Ce sont les requêtes qui ne sont pas préparées, car ces dernières sont un peu plus complexes.

Le code de la requête

Le code de la requête est le suivant :

 

Exemple :

    $query2 = "SELECT * FROM personne ORDER BY noid;";
    $result2 = $mysqli->query($query2);

 

Voilà, requete était une simple requête SQL !

Mais maintenant, comment afficher ces résultats ?

C'est ce que nous allons voir…

Afficher le résultat d'une requête simple

Pour afficher le résultat de ce type de requêtes, il suffit de fetcher dans une boucle while.

 

    while ($val = $result2->fetch_assoc()){

        echo "<TR>"."<TD>".$val["noid"]."<TD>".$val["prenom"]."<TD>"
        .$val["nom"]."<TD>"."<IMG SRC='".$val["image"]."'>"."<TD>".$val["notype"]."</TR>";
    }

 

Que se passe-t-il ? En réalité, c'est relativement simple : $donnees est transformé en un tableau avec les noms des colonnes demandées dans la requête. Cette transformation est réalisée grâce à la fonction mysqli_fetch_assoc($resultat), $resultat étant le résultat brut de la requête. Cette fonction sert aussi et surtout à passer au résultat suivant, d'où l'utilisation de la boucle while.

Oups ! J'ai oublié quelque chose ! Description : :-°

 

    $result2->free();
    $mysqli->close();

 

C'est mieux comme ça ! Description : :lol:
Eh oui, il ne faut pas oublier de fermer le curseur.

 

 

Fermer le curseur permet de libérer les données récupérées lors d'une requête SQL.

 

 

Les requêtes préparées

Pour travailler avec les requêtes préparées, il y a un certain ordre à suivre :

  1. préparer la requête ;
  2. lier les variables à la requête ;
  3. exécuter la requête ;
  4. si la requête renvoie un résultat, on continue : lier le résultat à des variables ;
  5. fetcher le résultat.

 

Quelques fonctions supplémentaires...

Même si vous les trouverez toutes dans la doc' de MySQLi, je vais vous montrer quelques fonctions, que je pense vous aurez besoin de temps en temps.

Connaître le nombre d'entrées retournées

Connaître le nombre d'entrées dans une table peut parfois être utile: donner le nombre de commentaires dans un blog, le nombres de réponse dans un forum... Nous allons voir ça en détail avec des requêtes simples et préparées.

Avec une requête simple

Vous devez utiliser la fonction suivante:

<?php

mysqli_num_rows($requete);

?>

 

La fonction vous retournera le nombre d'entrées dans la table qu'elle a obtenu selon la requête SQL.

Exemple:

<?php

 

$nb = mysqli_num_rows($req);

 

echo 'Il y a ' . $nb . ' commentaire(s).';

?>

 

 

(Vous vous doutez bien qu'ensuite j'affiche ce nombre, et les commentaires à la suite ! Description : :p)

Si vous rencontrez un jour un problème que vous n'arrivez pas à résoudre, ajoutez le fichier de la connexion à MySQL juste avant la requête. C'est parfois une solution.
Pensez-y. Description : ;)

Non, non, ne vous inquiétez pas, je vais vous la donner, l'adresse de la DOC ! Attention, la voici, la voilà :
http://www.php.net/manual/fr/mysqli.summary.php

 

 

 


 

 

Exemples avec PHP

Télécharger : mysql.zip

 

 

 


   

Voici mes coordonnees: Stéphane Mercier (Mers), stephane.mercier@cegeplevis.ca, 418 833-5110, poste 5511, Local G205A (disponnible par MIO)

Tout droit réservé à personne !!!

.