Informations générales de développement numérique.

Informations MEZOTICAM - Activités générales : Plus de masque, mais restons vigilants. Les contraintes sanitaires obligent à un ralentissement des développements. | Guerre en Ukraine : Un conflit qui mène à une pénurie alimentaire et informatique. | Cybersécurité : La guerre en Ukraine nous montre combien il est important de renforcer la sécurité informatique.
Chiffre 2Chiffre 4Chiffre 0Chiffre 5Chiffre 0Chiffre 4
depuis le 15/05/2009
Vendredi 2 Mai 2025 | Saint Boris

Language SQL

Introduction

Le traitement automatisé des données pose le problème du stockage de celles-ci. La solution, le stockage dans des fichiers appelés "Base de Données". Pour se faire, il existe principalement trois type de bases de données :

  1. Bases de données simple (Fichiers texte)
  2. Bases de données relationnelles (dont MySQL)
  3. Bases de données relationnelles orientées objet (ORACLE, PostGRESQL)

Seul SQL (Structured Query Language) permet, en tant que langage standard, de communiquer avec les bases de données. Mais chaque base de données implémente ce langage avec des spécificités.

Conservation des données de manière simple, sans base de données relationnelle, en utilisant des fichiers texte et PHP.

Base de Données Simple

La base de données simple consiste en un stockage dans un fichier texte. Ce type de stockage ne nécessite aucune gestion spéciale (comme un serveur de base de données) mais reste beaucoup moins souple en ce qui concerne le traitement des informations qu'il renferme.

Exemple : Commentaires d'Internautes

Pour mettre en place un système de commentaires d'internautes, vous aurez besoin des éléments suivants :

  1. Une page avec un formulaire de saisie (comment.php).
  2. Un script d'enregistrement (ajout.php).
  3. Un script de lecture (lecture.php).
  4. Un fichier texte pour le stockage (comment.txt).
  5. Structure des Fichiers

comment.php (Page d'accueil) :

  1. Contient le formulaire de saisie des commentaires.
  2. Appelle le fichier ajout.php pour enregistrer les commentaires.
  3. Inclut le fichier lecture.php pour afficher les commentaires existants.
<form method="post" action="ajout.php">
  <input name="nom" type="text" size="30" placeholder="Nom">
  <input name="prenom" type="text" size="30" placeholder="Prénom">
  <input name="courriel" type="text" size="30" placeholder="Courriel">
  <textarea rows="10" cols="40" name="textemessage" placeholder="Votre message"></textarea>
  <input type="submit" value="Envoyer">
</form>

<?php include 'lecture.php'; ?>

ajout.php (Script d'enregistrement) :

  1. Récupère les données du formulaire.
  2. Lit les anciens commentaires et ajoute le nouveau commentaire.
  3. Écrit les informations dans le fichier texte.
<?php
$date = date("d/m/Y");
$nomfichier = "comment.txt";

$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$courriel = $_POST['courriel'];
$textemessage = $_POST['textemessage'];

// Lecture des anciens commentaires
$fichier = fopen($nomfichier, "r");
$anciensmessages = fread($fichier, filesize($nomfichier));
fclose($fichier);

// Écriture des nouveaux commentaires
$fichier = fopen($nomfichier, "w");
fwrite($fichier, "<table width='100%' border='0'>");
fwrite($fichier, "<tr><td>$nom $prenom</td></tr>");
fwrite($fichier, "<tr><td>$courriel</td></tr>");
fwrite($fichier, "<tr><td>$textemessage</td></tr>");
fwrite($fichier, "<tr><td>$date</td></tr>");
fwrite($fichier, "</table><hr>");
fwrite($fichier, $anciensmessages);
fclose($fichier);

// Redirection vers la page d'accueil
header("Location: comment.php");
exit();
?>

lecture.php (Script de lecture) :

  1. Lit et affiche les commentaires stockés dans le fichier texte.
<?php
$nomfichier = "comment.txt";
$fichier = fopen($nomfichier, "r");
if (!$fichier) {
  print("Le fichier n'existe pas !");
  exit();
}

while (!feof($fichier)) {
  $ligne = fgets($fichier, 1024);
  print($ligne);
}
fclose($fichier);
?>

Fonctions PHP Utilisées

  1. fopen() : Ouvre un fichier.
  2. fread() : Lit le contenu d'un fichier.
  3. fwrite() : Écrit dans un fichier.
  4. fclose() : Ferme un fichier.

Explications

Récupération des Données :

  1. Les données du formulaire sont récupérées via la méthode POST.
  2. Les anciens commentaires sont lus à partir du fichier texte.

Écriture des Données :

  1. Les nouveaux commentaires sont ajoutés au début du fichier texte.
  2. Les anciens commentaires sont ajoutés après les nouveaux commentaires.

Affichage des Données :

  1. Les commentaires sont lus et affichés dans la page d'accueil.

Conclusion

Cette méthode de stockage simple est idéale pour des projets de petite envergure où la gestion des données n'est pas complexe. Cependant, pour des projets plus importants, l'utilisation d'une base de données relationnelle est recommandée pour une meilleure gestion et sécurité des données.

Base de données relationnelle

L'utilisation de PDO (PHP Data Objects) est recommandée pour interagir avec les bases de données en PHP, car elle offre une couche d'abstraction qui permet de travailler avec différents systèmes de gestion de bases de données (SGBD) de manière uniforme. PDO améliore également la sécurité en facilitant l'utilisation de requêtes préparées, ce qui aide à prévenir les injections SQL.

Introduction aux Bases de Données Relationnelles

Une base de données relationnelle organise les données en tables, où chaque table est une collection de champs (ou colonnes) et chaque champ contient des enregistrements (ou lignes). Les relations entre les tables sont établies à l'aide de clés, qui sont des identifiants uniques permettant de relier les enregistrements entre eux.

Exemple d'informations :

  1. Nom
  2. Prénom
  3. Adresse
  4. Téléphone

Nom et Prénom ne seront que rarement modifiés, tandis que Adresse et Téléphone peuvent l'être très souvent.

La base de données permet de modifier et surtout de consulter toutes les informations de manière associée ou dissociée, grâce à des critères de sélection et au langage SQL. Cela représente, en termes de programmation, un grand gain de temps.

Structure d'une Base de Données Relationnelle

  1. Base de données : Contient une ou un ensemble de tables.
  2. Table : Collection de champs.
  3. Champs : Collection des données proprement dites (enregistrements de même nature).
  4. Enregistrement : Les informations stockées, reliées entre elles souvent par une clé.
  5. Clé : Information unique permettant de relier un ensemble d'enregistrements.

Utilisation de PDO en PHP

PDO (PHP Data Objects) est une extension qui définit une interface pour accéder aux bases de données en PHP. PDO offre les avantages suivants :

  1. Sécurité : Utilisation de requêtes préparées pour prévenir les injections SQL.
  2. Portabilité : Compatibilité avec différents SGBD (MySQL, PostgreSQL, SQLite, etc.).
  3. Performance : Gestion efficace des connexions et des transactions.

Exemple de Connexion et d'Utilisation de PDO

Connexion à la Base de Données :

<?php
try {
  // Connexion au serveur de base de données
  $pdo = new PDO("mysql:host=nom-serveur;dbname=nom-base", "nom-utilisateur", "mot-de-passe");
  // Définir le mode d'erreur de PDO sur Exception
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  echo "Connexion réussie !";
} catch (PDOException $e) {
  die("Connexion échouée : " . $e->getMessage());
}
?>

Requête Préparée pour Sélectionner des Données :

<?php
try {
  // Préparer la requête SQL
  $stmt = $pdo->prepare("SELECT * FROM utilisateurs WHERE id = :id");
  // Lier les paramètres
  $stmt->bindParam(':id', $id);
  // Exécuter la requête
  $stmt->execute();
  // Récupérer les résultats
  $resultats = $stmt->fetchAll(PDO::FETCH_ASSOC);
  foreach ($resultats as $row) {
    echo "Nom : " . $row['nom'] . " Prénom : " . $row['prenom'] . "<br>";
  }
} catch (PDOException $e) {
  die("Erreur lors de la requête : " . $e->getMessage());
}
?>

Insertion de Données :

<?php
try {
  // Préparer la requête SQL
  $stmt = $pdo->prepare("INSERT INTO utilisateurs (nom, prenom, adresse, telephone) VALUES (:nom, :prenom, :adresse, :telephone)");
  // Lier les paramètres
  $stmt->bindParam(':nom', $nom);
  $stmt->bindParam(':prenom', $prenom);
  $stmt->bindParam(':adresse', $adresse);
  $stmt->bindParam(':telephone', $telephone);
  // Exécuter la requête
  $stmt->execute();
  echo "Nouvel utilisateur ajouté avec succès !";
} catch (PDOException $e) {
  die("Erreur lors de l'insertion : " . $e->getMessage());
}
?>

Fermeture de la Connexion :

<?php
// Fermeture de la connexion
$pdo = null;
?>

Conclusion

L'utilisation de PDO en PHP pour interagir avec les bases de données offre une méthode sécurisée, portable et performante. En suivant ces exemples, vous pouvez facilement vous connecter à une base de données, exécuter des requêtes préparées pour sélectionner et insérer des données, et gérer les erreurs de manière efficace.

Éléments du langage

NomDéfinitionOptions
CREATECréation d'une base de donnéesnom_de_la_base
CREATE TABLECréation de table dans une base de donnéesnom_de_la_table (nom_champs1 type_données options, nom_champs2 type_données options, ...)
ALTER TABLEOpérations sur une tablePermet d'apporter des modifications à la structure d'une table (voir plus bas)
INSERT INTOInsérer des donnéesnom_de_la_table (nom_champs1 type_données options, nom_champs2 type_données options, ...) VALUES (valeur1, valeur2, ...)
SELECTSélectionner des champs dans une table avant toute opérationnom_champs1, nomchamps2 ... FROM nom_table
UPDATEModifier des données existantesnom_table SET nom_champs1=valeur1, nom_champs2=valeur2, ... WHERE numero LIKE 'valeur'
DELETESupprimer des données existantesFROM nom_table WHERE nom_champs LIKE 'valeur'

La clause WHERE permet d'affiner la sélection, afin d'éviter une opération non désirée.



Opérations avec ALTER TABLE

NomDescription
ADD nom_champsAjoute un nouveau champs à une table
CHANGE nom_champs nouv_champsChange le nom d'un champs
DROP nom_champsSupprime le champs spécifié
MODIFY nom_champsChange le nom d'un champs (MySQL 3.22.16)
RENAME nouv_nomRenomme la table en nouv_nom
DROP primary keySupprime la clé primaire de la table

Types de données

Données numériques

NomStockageDescription
tinyint1 bitStockage de nombres entre -128 et 127 (0 et 255 si unsigned)
smallint2 bitsStockage de nombres entre -215 et 215-1 (0 et 216-1 si unsigned)
mediumint3 bitsStockage de nombres entre -223 et 223-1 (0 et 224-1 si unsigned)
int4 bitsStockage de nombres entre -231 et 231-1 (0 et 232-1 si unsigned)
bigint8 bitsStockage de nombres entre -263 et 263-1 (0 et 264-1 si unsigned)
float4 bitsStockage de nombres entre 1,178494351. 10-38 et 3,402823466. 1038
double8 bitsStockage de nombres entre 2,225073858. 10-308 et 1,7976931348. 10308
decimalM bitsStockage de nombres sous la forme de chaîne de caractères

Données type chaîne de caractères

NomStockage
charDe 0 à M bits
varcharDe 0 à M bits
tinyblobDe 0 à 255 bits
blobDe 0 à 65 535 bits
mediumblobDe 0 à 224 -1bit
longblobDe 0 à 232 -1bit
tinytextDe 0 à 287 -1bit
textDe 0 à 216 -1bit
mediumtextDe 0 à 224 -1bit
longtextDe 0 à 232 -1bit

Données type Temps et Date

NomStockageDescription
date3 bitsFormat "AAAA-MM-JJ"
time3 bitsFormat "HH:MM:SS"
datetime8 bitsFormat "AAAA-MM-JJ HH:MM:SS"
timestamp4 bitsFormat "AAAAMMJJHHMMSS"
year1 bitsFormat "AAAA" (de 1900 à 2155)

Caractéristiques

MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées en lecture, ce qui signifie qu'il est davantage orienté vers le service de données déjà en place que vers celui de mises à jour fréquentes et fortement sécurisées. Il est multi-thread et multi-utilisateur.

C'est un logiciel libre développé sous double licence en fonction de l'utilisation qui en est faite : dans un produit libre ou dans un produit propriétaire. Dans ce dernier cas, la licence est payante, sinon c'est la licence publique générale GNU (GPL) qui s'applique. Ce type de licence double est utilisé par d'autres produits comme le framework de développement de logiciels Qt (pour les versions antérieures à la 4.5).

Systèmes d'exploitation supportés

MySQL fonctionne sur de nombreux systèmes d'exploitation différents, incluant AIX, IBM i-5, 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 (2000, XP, Vista et 7).

Les bases de données sont accessibles en utilisant les langages de programmation C, C++, VB, VB .NET, 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.

MySQL AB étant la propriété de Sun Microsystems, est devenu officieusement la base de données à utiliser conjointement avec le langage de programmation Java, ce qui lui donne une notoriété supplémentaire auprès des entreprises utilisant Java.

Moteurs de base de données inclus

L'une des spécificités de MySQL est de pouvoir gérer plusieurs moteurs au sein d'une seule base. Chaque table peut utiliser un moteur différent au sein d'une base. Ceci afin d'optimiser l'utilisation de chaque table.

Les différents moteurs historiques de MySQL

  • MyISAM : moteur par défaut de MySQL. Il est le plus simple à utiliser et à mettre en œuvre. Il utilise plusieurs fichiers qui grandissent au fur et à mesure que la base grossit. Il ne supporte pas les transactions, ni les clefs étrangères.
  • InnoDB : moteur créé et maintenu par InnoBase (racheté par Oracle le 7 octobre 2005). Il gère les transactions et les clefs étrangères (et donc une gestion d'intégrité de table). En contrepartie, les bases qui l'utilisent occupent bien plus d'espace sur le disque.
  • BerkeleyDB (BDB) : moteur fourni par Sleepycat Software qui gère les transactions.
  • MERGE : moteur fait pour fusionner plusieurs tables qui doivent être identiques.
  • ARCHIVE : moteur adapté à l'archivage de données. Les lignes sont compressées au fur et à mesure de leur insertion. Les requêtes de recherches sont alors sensiblement plus lentes.
  • MEMORY (HEAP) : moteur où les tables sont stockées uniquement en mémoire. La structure de la base est stockée sur le disque dur mais les données sont stockées dans la RAM, si la machine serveur redémarre, les données seront perdues. Cependant, étant donné qu'il n'y a plus d'accès disque, une requête de modification (UPDATE, INSERT…) s'exécutera sensiblement plus rapidement.
  • CSV : moteur utilisant des fichiers textes (au format CSV) comme stockage.
  • BLACKHOLE : moteur réceptionnant les données, les transférant mais ne les stockant pas. Il peut être utilisé comme répéteur ou comme filtre de données.
  • ISAM : moteur d'origine de MySQL, maintenant obsolète et remplacé par MyISAM. Il est resté pour des raisons de compatibilité.
  • NDB (uniquement dans la version MaxDB) : moteur de base de données réseau gérant les grappes de serveurs.
  • FEDERATED : moteur permettant d'accéder à des tables d'une base de données distantes plutôt que dans les fichiers locaux.
  • EXEMPLE : moteur fictif et inutilisable, mis à disposition pour les développeurs.
  • FALCON : ce nouveau moteur devrait faire son apparition avec MySQL 6. Depuis le rachat de InnoBase par Oracle, MySQL AB s'est vu obligé de créer un nouveau moteur transactionnel pour ne plus dépendre de son concurrent. Il devrait remplacer petit à petit InnoDB.
  • MARIA : evolution ACID de MyISAM

Des moteurs de stockages OPEN Source

  • Infobright : moteur VLDB, orienté vers les applications décisionnelles
  • Sphinx : moteur orienté recherche full text
  • PBXT : moteur transactionnel proche des performances d'InnoDB
  • Memcached : moteur orienté table de hash en mémoire
  • M4q : moteur orienté gestion de file d'attente

Des moteurs de stockages commerciaux

  • DB2 Moteur transactionnel copyright IBM
  • SolidDB Moteur transactionnel copyright IBM
  • NitroEDB Moteur VLDB copyright BrightHouse
  • Tokutek Moteur VLDB

La facilité d'utilisation de plusieurs moteurs de stockage dans une seule base avec MySQL permet une énorme flexibilité dans l'optimisation de la base : on utilisera MyISAM pour stocker les données peu sensibles et nécessitant un accès rapide aux données (par exemple une liste d'utilisateurs), InnoBD pour les fonctions avancées et les données plus sensibles (par exemple pour une liste des transactions bancaires), MEMORY pour des données pouvant être perdues lors du redémarrage de la machine et souvent modifiées (par exemple une liste d'utilisateurs en ligne), ARCHIVE pour un historique (ou log) ne nécessitant que peu de lecture…