Tutoriel PHP-MySQL : 1ère partie

Quand nous désirons interroger une base de données [DB] au travers d'un langage Web, que ce langage soit le PHP ou l'ASP, il existe certaines constantes auxquelles nous devons nous conformer.

Dans cette première partie, nous allons simplement approcher les mécanismes, le plus simplement possible mais pas de la de manière la plus efficace. La seconde partie nous montrera comment améliorer ces différents bouts de codes.

Que signifient PHP, MySQL, SQL,...?

MySQL est le SGBD [Système de Gestion de Base de Données] que nous allons utiliser pour stocker nos données.

SQL est le SQL [“Structured Query Language”4] est le langage que nous allons utiliser pour exécuter des opérations (lire, ajouter, modifier des données, modifier la structure, etc.) sur notre DB. Nous utiliserons le terme requêtes pour les différentes commandes que nous passerons à la DB.

PHP est le langage que nous allons utiliser dans nos pages Web pour exécuter des opérations avant d'envoyer la page vers le navigateur du client. Dans le cas de ce tutoriel, nous utiliserons principalement PHP pour "piloter" notre DB MySQL (en lui fournissant éventuellement les requêtes SQL nécessaires).

Contents Haut

Connexion à la base de données

Avant de pouvoir manipuler (afficher, modifier, ajouter, supprimer) des données d'une DB, nous devons nous connecter à cette DB en lui fournissant différentes informations.

Changement d'API MySQL

Au moment de la création de cette page (16/10/2004), l'utilisation de ces méthodes était le seul moyen à notre disposition.

PHP 5.0 nous a apporté le pattern DAO mysqli, puis PDO_MySQL avec PHP 5.1.
L'ancienne méthode utilisant mysql (mysql_connect, mysql_connect, mysql_select_db, mysql_query, etc.) déclenche une alerte de niveau E_DEPRECATED depuis PHP 5.5.0, et ne sera carrément plus disponible à partir de PHP 7.0.

Vous pouvez passer directement aux nouveaux exemples.

Depuis PHP 2.0 jusqu'à sa version 7.0.0, PHP nous offrait deux méthodes pour nous connecter à la DB :

  • mysql_connect, qui ouvrait une connexion à un serveur MySQL.
  • mysql_pconnect, qui permettait de garder la connexion ouverte. Le risque était très grand d'oublier de fermer des connexions.

Ces deux fonctions utilisaient les mêmes arguments :

  • Nom de l'hôte : permet de localiser la machine sur laquelle notre DB MySQL est installée.
    Nous pouvons spécifier son adresse IP, comme par exemple 10.0.120.4.
    Nous pouvons aussi simplement spécifier le nom de la machine, comme par exemple mysql5test.
  • Login : nom d'utilisateur de notre DB MySQL.
  • Mot de passe : mot de passe associé au nom d'utilisateur.

Nom de l'hôte :

Dans le cas de tests, nous avons souvent une seule machine sur laquelle se trouve la DB et depuis laquelle nous affichons la page. Dans ce cas, nous pouvons utiliser l'adresse 127.0.0.1, ou le nom localhost

Port MySQL (3306)

Nous ne devons généralement pas spécifier le port, car MySQL utilise par défaut le port 3306. Cependant, lorsque la configuration est différente, nous devons spécifier le numéro de port de MySQL après le nom d'hôte comme ceci : "10.0.120.4:3306", ou comme ceci "mysql5test:3306".

Syntaxe de la connexion (mysql_connect)

  1. $db_connection = mysql_connect('mysql5test', 'test', 'password');

La fonction PHP mysql_connect nous renvoie l'identifiant de la connexion dans le cas où tout se passe bien. Nous verrons dans la 2e partie du tutoriel comment traiter les erreurs possibles.

Connexion avec mysqli

  1. $mysqli = new mysqli('mysql5test', 'test', 'password', 'Infobrol');

Cet appel au constructeur de mysqli nous renvoie non plus un identifiant, mais bien une instance d'un objet qui représente la connexion, instance sur laquelle nous pourons appeler différentes méthodes.

Paramètres:

  • Nom de l'hôte : mysql5test.
  • Login : test.
  • Mot de passe : password.
  • Nom de la DB : Infobrol.

Nous pouvons aussi passer au constructeur les arguments suivants:

  • Port : le numéro du port pour la connexion au serveur MySQL (souvent 3306).
  • Socket : le socket ou le nom du tunnel à utiliser.

Contents Haut

Sélectionner la base de données

Un serveur MySQL peut contenir beaucoup de bases de données différentes. Avec mysqli ou PDO_MySQL, cela se fait au moment de l'appel au constructeur, mais avec mysql nous devions donc spécifier quelle DB nous désirons utiliser.

  1. // Selection de la base de donnees
  2. mysql_select_db('Infobrol');

Nom de la DB

Les hébergeurs ne proposent souvent qu'une seule DB, et ils utilisent souvent le même nom pour la DB et le login.

Contents Haut

Déconnexion de la base de données

  1. // Deconnexion de la base de donnees
  2. mysql_close($db_connection);

Nous ne devons pas oublier de fermer de la connexion après que nous ayons manipulé les informations.

Se connecter à une base de données est toujours une affaire de compromis, car la connexion nécessite un certain temps. Soit nous décidons de laisser la connexion ouverte le temps d'effectuer les différentes requêtes, soit nous nous connectons à chaque fois que c'est nécessaire.
Une méthode de travail efficace est de grouper les requêtes afin d'éviter justement les temps de connexions.

Contents Haut

Exemple avec mysql

  1. <?php
  2. // Se connecter
  3. $db_connection = mysql_connect('mysql5test', 'test', 'password');
  4.  
  5. // Selectionner la base de donnees
  6. mysql_select_db('Infobrol');
  7.  
  8. // Effectuer des operations sur la DB
  9. $result = mysql_query("SELECT def AS _dico_def FROM dictionnaire;");
  10. $row = mysql_fetch_assoc($result);
  11. echo $row['_dico_def'];
  12. // …
  13.  
  14. // Se deconnecter de la DB
  15. mysql_close($db_connection);
  16. ?>

Exemple avec mysqli

  1. <?php
  2. // Se connecter
  3. $mysqli = new mysqli('mysql5test', 'test', 'password', 'Infobrol');
  4.  
  5. // Effectuer des operations sur la DB
  6. $result = $mysqli->query("SELECT def AS _dico_def FROM dictionnaire;");
  7. $row = $result->fetch_assoc();
  8. echo $row['_dico_def'];
  9. // …
  10. ?>

English translation

You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.

If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.

Thank you in advance.

Document created the 16/10/2004, last modified the 27/10/2018
Source of the printed document:https://www.gaudry.be/en/php-mysql-intro.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.

Notes
  1. a,b,c,d,e,f… 9 more links… DataBase : corresponds to « base de données » en français

  2. a,b,c,d,e,f… 9 more links… DB : “DataBase” (en français, « base de données »)

  3.  SGBD : Système de Gestion de Base de Données

  4. a,b Structured Query Language : corresponds to « langage structuré d'interrogation » en français

  5.  SQL : “Structured Query Language” (en français, « langage structuré d'interrogation »)

  6.  mysql_pconnect() : De nombreux hébergeurs limitent le nombre de connexions simultanées à la base de données. Si des connexions restent inutilement ouvertes, il est fort possible que l'accès à la DB soit refusé à certains moments.

  7.  Arguments de mysql_pconnect() : Ces arguments sont tous facultatifs. Si ils ne sont pas spécifiés, PHP utilisait les valeurs par défaut de votre serveur, qui sont définies dans le fichier "php.ini".

  8.  Internet Protocol : corresponds to « protocole Internet » en français

  9.  IP : “Internet Protocol” (en français, « protocole Internet »)

  10.  mysql_close() : Dans le cas d'une connexion ouverte avec mysql_connect, la fermeture facultative. Toutefois, nous prendrons l'habitude de toujours fermer la connexion.

Contents Haut