*** 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
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/

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
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');
?>
Exemple:
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 :
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.
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 !
C'est mieux comme ça !
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 :
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 ! )
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.
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 !!!
.