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).

Inhoudsopgave 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.

Inhoudsopgave 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.

Inhoudsopgave 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.

Inhoudsopgave 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. ?>

Nederlandse vertaling

U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.

Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.

Bij voorbaat dank.

Document heeft de 16/10/2004 gemaakt, de laatste keer de 27/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/php-mysql-intro.html

De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.

Notes

  1. a,b,c,d,e,f… 9 meer links… DataBase : komt overeen met « base de données » en français

  2. a,b,c,d,e,f… 9 meer 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 : komt overeen met « 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 : komt overeen met « 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.

Inhoudsopgave Haut