Sommaire du site
Présentation
Comment apprendre
L'équipement
La page web
Styles et CSS
HTML, structure de la page
HTML, éléments du corps
Le langage JavaScript
JavaScript, objets "core"
JavaScript, DOM, les bases
JavaScript, DOM, node
JavaScript, compléments
Le langage PHP, les bases
PHP, fonctions utiles
PHP pour le web
PHP, compléments
SQL, introduction
MySQL et PHP pour le web
MySQL, plus loin...
Applications AJAX
Annexes utiles
Fichier .htaccess
Sécurité des sites web
Conception d'un site web
Référencement,
syndication
Page mise à jour le : 12-08-2015
Le web est un excellent moyen d'accès aux bases de données car il donne cette possibilité à de nombreux utilisateurs. De plus en plus de sites web comportent des pages qui ne contiennent que peu d'informations statiques mais qui les produisent depuis une base de données. C'est le cas de la plupart des sites d'information.
De plus cela permet à des personnes peu familiarisées avec les outils informatiques d'alimenter le site facilement. C'est le cas des blogs, des sites basés sur les CMS (Content Management System) tels que SPIP ou Joomla et des Wikis.
On a ainsi un partage des tâches :
Mais l'accès aux informations de base de données depuis le PHP est aussi intéressant sous d'autres aspects :
La connexion à une base de données "MySQL" se fait en deux temps :
Cette connexion est protégée par un système d'authentification simple. Il faut généralement trois informations :
Depuis le PHP, la connexion se fait par la fonction :
où les trois paramètres sont des chaînes de caractères.
Cette fonction renvoie un identifiant de connexion ou FALSE si la connexion n'a pas pu être réalisée.
Il est possible d'établir plusieurs connexions pour travailler dans le même script avec différentes bases de données. Dans ce cas l'identifiant de connexion devra être transmis à la plupart des fonctions de l'interface MySQL.
Mais ce cas est assez rare et l'identifiant de connexion peut être omis pour ces fonctions. Cette page les présente dans ce dernier cas.
Par la fonction PHP
Où 'nom_base' est le nom de la base de données.
Cette fonction renvoie TRUE si elle a réussi, FALSE dans le cas contraire.
Comme on vient de le voir, il se peut que les fonctions précédentes n'aboutissent pas. Dans ce cas, il peut être intéressant de savoir pourquoi.
Le système propose deux fonctions qui donnent plus de renseignements sur les erreurs et qui sont utilisables avec la plupart des fonctions d'accès à MySQL
La fonction mysql_errno() renvoie le numéro de la dernière erreur produite sur MySQL. Elle n'est pas très utile car il faut trouver, dans la documentation MySQL, à quelle erreur ce numéro correspond.
L'autre est plus intéressante.
Elle renvoie sous forme de texte le message associé à la dernière erreur produite sur MySQL (en anglais).
Il est très intéressant de placer ces deux fonctions de connexion dans un fichier séparé à inclure.
En effet, il est probable que plusieurs pages du site nécessiteront une connexion à la base.
De plus, comme on l'a vu la fonction 'mysql_connect' utilise des paramètres confidentiels. Par conséquent ce fichier devrait être placé à un endroit non accessible par le web (en amont du répertoire 'www').
Si on utilise un serveur local pour les tests et un serveur distant pour la production, il est probable que l'on n'utilisera pas pour ces deux contextes les mêmes caractéristiques de connexion. Dans ce cas il est simple d'utiliser des fichiers de même nom mais de contenu différents sur les deux serveurs.
Notons l'utilisation de l'opérateur 'or' qui permet d'abandonner l'exécution en cas d'erreur.
Voici les principales fonctions PHP pour accéder à MySQL.
C'est certainement la fonction la plus utilisée car elle fait exécuter la requête passée en paramètre par MySQL.
Pour les requêtes de type SELECT qui retourne une liste d'informations cette fonction renvoie une ressource de résultat qui devra être transmise aux fonctions de parcours de cette liste (voir paragraphe suivant).
Pour les requêtes ne retournant pas d'information (INSERT, UPDATE, DELETE) cette fonction renvoie TRUE si la requête a bien été exécutée ou FALSE en cas d'erreur.
Cette fonction échappe les caractères qui seraient mal interprétés dans les requêtes SQL. Elle joue le même rôle que la fonction PHP 'addslashes()' mais est mieux adaptée au SQL et elle devrait être préférée. Cependant elle impose une connexion au serveur de bases de données préalable.
Avant d'utiliser cette fonction il est nécessaire de vérifier que le traitement implicite des "guillemets magiques" ne soit pas réalisé. Si c'était le cas il faut appeler auparavant la fonction 'stripslashes'.
Cette fonction est indispensable si les données sont binaires (non textuelles) ou si elles proviennent d'un formulaire.
Cette fonction peut être appelée après une requête modifiant la table (INSERT, UPDATE, DELETE). Elle renvoie le nombre de lignes affectées par la requête.
Dans le cas d'une table comportant un champ en "auto-incrément" et après une requête d'insertion, cette fonction renvoie la dernière valeur de l'auto-incrément
Toujours avec notre table d'adhérents d'association.
$nom= mysql_real_escape_string($nom_adherent);
$adresse= mysql_real_escape_string($adr_adherent);
$fonction= "adhérent";
$requete= "INSERT INTO `adherents` SET
`nom` = '$nom',
`adresse` = '$adresse',
`fonction` = '$fonction',
`date_cotisation` = NOW() ";
$id_req= mysql_query($requete);
//La ligne suivante est à modifier en production
if (!$id_req) exit ("Erreur [$requete]<br>".mysql_errno());
echo "Le nouvel adhérent à l'identifiant : ".mysql_insert_id();
Certaines requêtes renvoient des informations. En particulier on obtient une liste d'enregistrements par la requête SELECT ... FROM ...
Comme pour les autres, cette requête est lancée par la fonction 'mysql_query()'. Dans ce cas cette fonction, si elle aboutit, renvoie une liste d'enregistrements. Et chaque enregistrement sera un tableau (au sens du PHP) dont chaque composante sera une valeur de champ.
Il nous faut donc un moyen pour parcourir la liste des enregistrements obtenus. Pour cela l'interface PHP nous fourni une famille de fonctions dont le nom commence par "mysql_fetch_".
A chaque appel ces fonctions renvoient le tableau de l'enregistrement courant ou FALSE s'il n'y en a plus. Un pointeur interne est géré pour que la suite des appels corresponde à l'obtention des enregistrements dans l'ordre où SELECT les a générés.
Voici les deux fonctions les plus utiles.
Renvoie, pour chaque enregistrement, un tableau indexé numériquement sur les champs obtenus (commence à l'indice 0).
Le paramètre 'res' est la ressource de résultat obtenu par la fonction 'mysql_query()'.
Avec notre exemple,
Nous donne le nom et l'adresse de tous les adhérents
Comme la précédente, mais est renvoyé un tableau associatif indexé par les noms des champs.
On voudrait connaitre les adhérents qui n'ont pas payé leur cotisation depuis moins d'un an.
Remarquez, dans la clause WHERE l'expression "il y a un an" de la date :
"NOW() - INTERVAL 1 YEAR"
En savoir plus sur les dates en MySQL :
http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
Ces fonctions renvoient toujours un tableau même si un seul champ/colonne est demandé.
Ces fonction prennent comme paramètre une ressource de résultat obtenu par la fonction 'mysql_query()'.
Renvoie le nombre d'enregistrements obtenus.
Il n'est pas nécessaire d'utiliser une fonction 'mysql_fetch_' auparavant.
Renvoie le nombre de champs des enregistrements de la liste. Utile si l'on a fait un "SELECT * FROM...".
Cette fonction libère la mémoire utilisée par une fonction 'mysql_fetch_'.
Cela est utile lorsque l'on parcourt de grandes listes de résultats successivement. Sinon la mémoire est libérée à la fin de l'exécution du script.
Mais on peut faire encore mieux (plus compliqué aussi avec MySQL)