Langage #5 : MYSQL

Mysql est un système de base de données relationnelle, tout un sujet ! Une base de données c’est là qu’on retrouvera des données : privées, des logins, des adresses, des recettes, des statistiques, … Parlons un peu de ce qu’est MySql, et des logiciels se trouvant autour de ce système de base de données. Le couplet PHP/MySql permettra de manipuler ces données. Dans le backoffice d’un site WEB, on retrouvera souvent le concept du CRUD : Create, Read, Update, Delete ! Une interface entre php et MySql existe, par un langage de requête, il est possible d’exécuter le CRUD.
MySQL, date de création et version

C’est une pièce de la machinerie d’un site WEB dynamique et interactif qui permet de stocker des données, d’y accéder et de les modifier de manière sécurisée. On le retrouve sous la forme d’un serveur de base de données, très utilisé sur internet, il est distribué en licence GPL. SQL veut dire Structured Query Language, MySQL possède un langage de requêtes structurées et avec son interfaçage à travers le langage PHP, on arrive facilement à développer et mettre en ligne des CMS, CRM, ou Backoffice.

MySQL 1 a été créé en 1995 et MySQL 8.0.19 (13 janvier 2020) Au niveau du versionnage, on fera surtout attention à la version de PHP et de l’interface PHP/MySQL. En général, il n’y a pas de grandes difficultés pour une utilisation standard de MySQL.


Format de fichier

Lorsqu’on va regarder ce qui se trouve dans les dossiers de WAMP, on remarque qu’il y a beaucoup de fichiers. Comme tout logiciel, le serveur MySQL est constitué de fichiers, les données de la database sont stockés dans des fichiers, mais dans le cas des langages de programmation WEB on ne parlera pas de format de fichier pour les base de données MySQL : ⚠️ Le format de fichier n’est pas applicable dans ce cas ci.

Il faut utiliser un serveur MySQL et une application PHP (Interface WEB)), ou gérer la base de donnée par ligne de commande (via un terminal), ou encore utiliser un logiciel (un client).


Accéder à une base de donnée

Communément, j’utilise phpMyAdmin pour accéder aux bases de données MySQL des sites internet que j’administre. On accède ainsi au source, aux données brutes. Si on veut manipuler les données de manières moins abstraites, plus conceptuelles, on passera plutôt  par un backoffice. Par exemple  le backoffice de wordpress (/wp-admin) pour administrer le site avec les diverses options par concepts : articles, pages, thèmes, profiles utilisateurs, commentaires, extensions, …

Une base de donnée n’est pas manipulable par n’importe qui, il existe un minimum de sécurité ! C’est pour cela qu’il faut s’authentifier en se connectant à la base de donnée via un serveur MySQL avec un login user/password. C’est la base, ensuite pour augmenter la sécurité, on aura possibilité de mettre en oeuvre la double authentification par email, sms, apps d’authentification.

Pour accéder directement au contenu d’une base de données MySQL, il faut d’abord s’authentifier avec les données suivantes : L’hôte, le nom de la base de donnée, le nom de l’utilisateur et le mot de passe de l’utilisateur. L’utilisateur a des permissions sur la base de données, en lecture, écriture, ou admin. Il pourra alors selon ses permissions,  par exemple via phpMyAdmin ou en ligne de commande : lire, créer, mettre à jour, effacer. En anglais : Create, Read, Update, Delete, c’est la notion du CRUD. C’est plus orienté développeur.

Pour accéder de manière indirecte au contenu d’une base de données MySQL, on passera par un backoffice, un admin, une interface permettant de consulter des informations, d’ajouter des données, de les modifier, ou de les effacer. C’est plus orienté utilisateur.


 Se connecter à une base de données via php et l’interface mysqli 💪

<?php

$mysqli =

new mysqli(« nomDeLHôte », »nomDUtilisateur », »motDePasse », »nomDeBaseDeDonnees »);

// Check connection

if ($mysqli -> connect_errno) {

echo « Failed to connect to MySQL:  » . $mysqli -> connect_error; exit();

}

?>

 Se connecter à une base de données via la console mysql 

#Lancer la console MySQL, se connecter et sélectionner une base

sudo mysql

mysql>

mysql> database_12h30_communication_360

mysql> select * from

-> table_portfolio;


Client et serveur, quelques remarques

Le serveur de base de donnée MySQL peut donc être accédé via son adresse ip, ou par son hostname. Le client se connectera donc au serveur via le port 3306 qui l’orientera vers MySQL !

Bugs souvent rencontrés

Quelques erreurs, que l’on rencontre en ligne, sont l’affichage d’une page blanche avec un message d’erreur type 500 : Internal Server Error , ou par exemple “Error establishing a database connection”: Autre exemple, une erreur de connexion au serveur de base de données est en cours. Il s’agit alors de vérifier le nom d’utilisateur et mot de passe à la source où dans le script php, de vérifier le nom de l’hôte, et de l’état du serveur. Ou encore un autre exemple, le serveur est parfois surchargé, par exemple sur un hébergement mutualisé et le serveur interrompt la connexion avec un message. Les messages d’erreur sont une des ressources les plus importantes d’un débogage. Accéder aux messages d’erreurs, les décoder, les comprendre, permet de finaliser une investigation et de corriger la source du bug.

D’autres sources de débogage sont  les fichiers de logs. Avoir accès aux fichiers de logs permet parfois de gagner du temps, et donc de remettre en état un site internet bancal. Quelque soit le domaine, la méthodologie de débogage est importante. Elle peut commencer par une investigation qui souvent se réalise par l’ouverture d’un ticket par le support de l’agence de communication ou  directement chez l’hébergeur ou autre entreprise informatique.


Ressources et documentations

 La principale ressource de documentation est internet et ses moteurs de recherches. Mais voici un lien vers des exemples de requêtes MySQL. On y retrouvera les principales requêtes  Select [WHERE, GROUP BY, ORDER BY, LIMIT, DISTINCT, NOT IN, …], UPDATE, DELETE, CREATE TABLE, …


QUEST OF QUERIES !

🛠️ Quelques requêtes MySql

CREATE TABLE IF NOT EXISTS `projets_communication_neuchatel` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`titre` varchar(40) NOT NULL,

`temps_de_realisation` int NOT NULL,

`temps_de_developpement` int NOT NULL,

`budget` int NOT NULL,

`nb_de_visites` int NOT NULL,

`ingredients` varchar(255) NOT NULL,

`deadline` DATETIME NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf-8;

SELECT titre, temps_de_realisation, temps_de_developpement, budget, nb_de_visites, ingredients FROM projets_communication_neuchatel WHERE deadline >= ‘2020-01-01 23:59:59’;

UPDATE projets_communication_neuchatel SET title = ‘Publicité Commerciale #1’ WHERE id= 2020;

DELETE FROM projets_communication_neuchatel

WHERE id = 2019;

DROP DATABASE [IF EXISTS] covid_19;


On le répétera jamais assez !
D’abord la syntaxe, ensuite la cohérence des données !


Conclusion

La base de données est l’endroit où se trouve souvent des données sensibles, et est aussi un espace où l’on stocke des informations diverses, comme des recettes de cuisines, des articles, des statistiques, des informations de galeries photos (chemins vers les images, données Exif), etc  Actuellement, MySQL est le système de base de données relationnelles le plus utilisé, il est distribué en licences publiques générales GNU (GPL), et possède une communauté acquise qui partage ses connaissances. (Documentation, tutoriels, débogages)

Avec PHP, MySQL permet donc de créer des sites dynamiques, sécurisés, et interactifs : Journal, Magazine, Vitrine prêt à porter, Portfolio, E-Commerce, Concours, Newsletter, Quizz, Sondages, Statistiques, File manager, gestion d’utilisateur, Extranet, CRM, ORM, Cloud, … Tout site internet nécessitant du stockage de données utilisera une base de données, … MySQL fait l’affaire pour un usage raisonnable, et le fait bien!