Tutoriel PHP

PHP

Découvez les bases de PHP dans mon support de formation dédié à ce puissant langage orienté web.


HTML HTML5 CSS Dreamweaver Bootstrap

Base de données MySQL

Dans ce tutoriel, nous allons aborder la gestion des bases de données MySQL.

Qu'est ce que MySQL ?

MySQL est un système de gestion de bases de données relationnelles (SGBDR). Il est distribué sous une double licence GPL et propriétaire. Il fait partie des logiciels de gestion de base de données les plus utilisés au monde, autant par le grand public (applications web principalement) que par des professionnels, en concurrence avec Oracle, Informix et Microsoft SQL Server.

Son nom vient du prénom de la fille du cocréateur Michael Widenius, My. SQL fait référence au Structured Query Language (langage de requête structuré), le langage de requête utilisé.
Source Wikipédia

API, connecteur, pilote, extension

Cette section fournit des informations sur les solutions qui s'offrent à vous quand vous développez une application PHP qui a besoin de s'interfacer avec une base de données MySQL.

Qu'est-ce qu'une API?

Une Interface de programmation d'application, une Application Programming Interface, ou encore API, définit les classes, méthodes, fonctions et variables dont votre application va faire usage pour exécuter différentes tâches. Dans le cas des applications PHP, les communications avec une base de données se font généralement par une API qui est exposée dans une extension PHP.

Lors de l'écriture d'applications PHP qui doivent se connecter à MySQL, il y a plusieurs API disponibles. Ce document présente ces API, et vous donne les informations pour choisir la meilleure solution pour votre application.

Qu'est-ce qu'un connecteur ?

Dans la documentation MySQL, le terme connector fait référence à un logiciel qui permet à une application de se connecter à une base de données MySQL. MySQL fournit des connecteurs pour toute une collection de langages, y compris PHP.

Si votre application PHP a besoin de communiquer avec un serveur de base de données, vous devez écrire du code pour pouvoir vous connecter, envoyer des requêtes au serveur, etc. Un logiciel est nécessaire pour assurer l'interface que PHP va utiliser et gérer les communications entre votre application et le serveur de base de données : éventuellement, des bibliothèques intermédiaires sont nécessaires. Ces logiciels sont appelés de manière générique des connecteurs, car ils permettent de se connecter à un serveur de base de données.

Qu'est-ce qu'un pilote ?

Un pilote est un logiciel qui est conçu pour communiquer avec un type particulier de base de données. Un pilote peut aussi être appelé une bibliothèque, telle que la MySQL Client Library ou le MySQL Native Driver. Ces bibliothèques implémentent le protocole de bas niveau pour communiquer avec un serveur MySQL.

Qu'est-ce qu'une extension ?

Dans la documentation PHP, vous rencontrerez un autre terme : extension. Le code PHP est constitué d'un coeur, avec des extensions optionnelles. Les extensions MySQL de PHP, telles que mysqli et mysql, sont implémentées avec le framework PHP.

Une extension expose typiquement une API à un programmeur PHP, pour lui permettre de faciliter sa programmation. Cependant, certaines extensions qui utilisent le framework PHP n'exposent pas d'API au développeur PHP.

L'extension de pilote PDO MySQL, par exemple, n'expose pas d'API au programmeur PHP, mais fournit une interface à la couche PDO.

Les termes API et extension ne devraient pas signifier la même chose, car une extension PHP ne fournit pas d'API particulière au pgorammeur PHP.

Quelles sont les API PHP pour MySQL ?

Il y a trois API principales pour se connecter à MySQL :

  • L'extension mysql

  • L'extension mysqli

  • PHP Data Objects (PDO)

Chacune a ses avantages et ses inconvénients. Les sections suivantes tendent à vous donner une présentation rapide de chaque API.

Qu'est-ce que l'extension mysql de PHP ?

C'est l'extension originelle, conçue pour réaliser des applications PHP qui sont en interaction avec une base MySQL. L'extension mysql fournit une interface procédurale, et est destinée à une utilisation avec les serveurs MySQL versions 4.1.3 et plus anciennes. Cette extension peut être utilisée avec les versions de MySQL 4.1.3 et plus récente, mais elle ne pourra pas tirer parti des nouvelles fonctionnalités.

Note:

Si vous utilisez MySQL versions 4.1.3 ou plus récent, il est fortement recommandé d'utiliser l'extension mysqli.

Le code source de l'extension mysql est située dans le dossier d'extension PHP ext/mysql.

Qu'est-ce que l'extension mysqli de PHP ?

L'extension mysqli, ou, comme elle est parfois appelée, l'extension MySQL améliorée (i pour improved en anglais), a été développée pour tirer parti des nouvelles fonctionnalités des systèmes MySQL version 4.1.3 et plus récent. L'extension mysqli est inclue dans PHP depuis les versions 5.

L'extension mysqli a un grand nombre d'avantages et d'améliorations par rapport à l'extension mysql :

  • Interface orientée objet

  • Support des commandes préparées

  • Support des commandes multiples

  • Support des transactions

  • Capacités de déboguage avancées

  • Support du serveur embarqué

Note:

Si vous utilisez MySQL versions 4.1.3 ou plus récent, il est fortement recommandé d'utiliser cette extension.

En plus d'une interface orientée objet, l'extension propose aussi une interface procédurale.

L'extension mysqli est compilée avec le framework PHP, et son code source est rangé dans le dossier ext/mysqli.

Qu'est-ce que l'extension PDO de PHP ?

PHP Data Objects, ou PDO, est une couche d'abstraction de base de données, spécifique à PHP. PDO propose une API cohérente pour vos applications PHP, indépendamment du type de base de données avec laquelle vous travaillez. En théorie, si vous utilisez PDO, vous pouvez changer de base de données, disons de Firebird à MySQL, et ne faire que des changements mineurs à votre code PHP.

D'autres exemples de couches d'abstraction de base de données incluent JDBC pour Java et DBI pour Perl.

Si PDO a ses avantages, comme une API propre, simple et portable, ses inconvénients principaux sont qu'elle ne vous permet pas d'utiliser toutes les fonctionnalités avancées des dernières versions de MySQL. Par exemple, PDO ne vous permet pas de faire des requêtes multiples.

PDO est implémenté en utilisant le framework PHP, et son code source est rangé dans le dossier ext/pdo.

Qu'est-ce que le pilote MySQL pour PDO ?

Le pilote PDO MYSQL n'est pas une API en tant que tel, au moins du point de vue du développeur PHP. En fait, le pilote PDO MYSQL fait partie de PDO, et fournit les fonctionnalités particulières à MySQL. Le programmeur appelle l'API PDO, mais PDO utilise le pilote PDO MYSQL pour assurer les communications avec MySQL.

Le pilote PDO MYSQL fait partie de la grande famille des pilotes PDO. Les autres pilotes disponibles assurent les communications avec Firebird et PostgreSQL, entre autres.

Le pilote PDO MYSQL est implémenté avec le framework d'extension de PHP. Son code source est situé dans le dossier ext/pdo_mysql. Il n'expose aucune API au programmeur PHP.

What is PHP's MySQL Native Driver ?

Pour communiquer avec le serveur MySQL, les extensions mysql , mysqli et le pilote PDO MYSQL utilisent tous une bibliothèque bas niveau qui implémente le protocole MySQL. Par le passé, la seule bibliothèque disponible était la MySQL Client Library, aussi appelée libmysqlclient.

Cependant, l'interface présentée par libmysqlclient n'était pas optimisée pour les communications avec PHP, et libmysqlclient était conçue à l'origine en C, pour des applications de même type. Pour cette raison, le pilote MySQL natif mysqlnd a été développé comme une alternative à libmysqlclient pour les applications PHP.

Les extensions mysql, mysqli et le pilote MySQL natif peuvent chacun utiliser libmysqlclient ou mysqlnd. Comme mysqlnd a été conçu spécifiquement pour utiliser le système PHP, il propose de nombreux avantages et améliorations par rapport à libmysqlclient. Vous êtes vivement encouragés à en profiter.

Note:

Le MySQL Native Driver ne peut être utilisé qu'avec le serveur MySQL versions 4.1.3 et plus récent.

Le MySQL Native Driver est implémenté sur la base du framework d'extension PHP. Le code source est dans ext/mysqlnd. Il n'expose aucune nouvelle API au programmeur PHP.

Source php.net

Tout ça pour dire au final que nous utiliserons l'extension mysqli.

Connecter une base de données

Pour connecter, notre base de données, nous utilisons la fonction mysql_connect

<?php
mysqli_connect ("nom_hote","login","mot_de_passe", "base_de_donnees");
?>

Cette fonction a 4 arguments :

  1. Le nom de l'hôte : L'adresse IP ou le nom d'hôte de la machine où est le serveur MySQL est installé (Le plus souvent, MySQL est installé sur le même ordinateur que PHP. Dans ce cas, mettez la valeur "localhost")
  2. Le login
  3. Le mot de passe
  4. Le nom de la base de données

Faire un contrôle sur la connexion

Il est toujours préférable de faire un contrôle et tester la connexion.

<?php
$connection=mysqli_connect("nom_hote", "login", "mot_de_passe", "base_de_donnees");
// Contrôle sur la connexion
if (!$connection){ //Si la connexion n'a pas été effectué
    die ("Connection impossible");
}
else {
    echo "Connexion réussie";
}
?>

Qu'est ce qu'une requête SQL ?

Une requête est quelque part un questionnement dans notre base de données.

Par exemple, nous pourrions sélectionner tous les enregistrements (les lignes) de la table disques et les classer par nom.

La requête SQL :
SELECT * FROM disques ORDER BY nom_disque ASC

 

SELECT le premier mot indique quel type d'opération doit faire MySQL. Ca demande à MySQL d'afficher ce que contient une table.

* aprés le SELECT, on doit indiquer quels champs MySQL doit récupérer dans la table. le * signifie que l'on sélectionne tous les champs.

FROM : c'est un mot de liaison. Ca se traduit par "dans". FROM fait la liaison entre le nom des champs et le nom de la table

disques : c'est le nom de la table
ORDER BY nom_disque ASC: signifie que l'on va trier la table sur le champ nom_disque par ordre croissant

En savoir + sur les requêtes SQL

Télécharger la base de données disques.sql

Exécute une requête sur la base de données

Pour se faire, nous utiliserons mysqli_query ($link,"requete")

<?php
$connection=mysqli_connect("nom_hote", "login", "mot_de_passe", "base_de_donnees");
if (!$connection){
    die ("Connection impossible");
}
else {
    $requete=mysqli_query($connection,"SELECT * FROM disques ORDER BY nom_disque");
}
?>

Afficher le résultat d'une requête simple

mysqli_fetch_array une ligne de résultat sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux.

mysqli_fetch_array($requete)

Pour afficher la totalité des résultats contenus dans notre table disque, il suffit de faire une boucle par exemple avec while.

<?php
while($resultat=mysqli_fetch_array($requete)) {
    echo $resultat['nom_disque']."<br>";
}
?>

Résultat

Back in black
Beggars Banquet
Black Ice
Highway to hell
Kill 'Em All

Autres possibilités

mysqli_fetch_assoc($requete)

Récupère une ligne de résultat sous forme de tableau associatif

En savoir +

mysqli_fetch_row($requete)

Récupère une ligne de résultat sous forme de tableau indexé.

En savoir +

Traquer les erreurs dans une requête

Si vous souhaitez afficher les erreurs SQL, il faudra utiliser :

mysqli_error ($link)

Nous reprenons le script que nous avons écrit un peu au dessus et nous l'adaptons de cette manière.

<?php
$connection=mysqli_connect("nom_hote", "login", "mot_de_passe", "base_de_donnees");
if (!$connection){
    die (mysqli_error($connection));
}
else {
    $requete=mysqli_query($connection,"SELECT * FROM disques ORDER BY nom_disque");
}
?>

Compter le nombre d'enregistrements

Pour compter le nombre d'enregistrements de notre requête, nous utiliserons :

mysqli_num_rows($requete)

<?php
$connection=mysqli_connect("nom_hote", "login", "mot_de_passe", "base_de_donnees");
if (!$connection){
    die (mysqli_error());
}
else {
    $requete=mysqli_query($connection,"SELECT * FROM disques ORDER BY nom_disque");
    $total_requete=mysqli_num_rows($requete);
}
?>

Libérer la mémoire associée à un résultat

mysqli_free_result($requete)

Libère la mémoire associée à un résultat. mysql_free_result() n'est à appeler que si vous avez peur d'utiliser trop de mémoire durant l'exécution de votre script. Toute la mémoire associée à l'identifiant de résultat sera automatiquement libérée.

<?php
while($resultat=mysqli_fetch_array($requete)) {
    echo $resultat['nom_disque']."<br>";
}

mysqli_free_result($requete);

Déconnecter la base de données

mysqli_close($link)

Une fois que vous avez fini de travailler sur votre base de données, il faut vous déconnecter avec la fonction

<?php
<?php
while($resultat=mysqli_fetch_array($requete)) {
    echo $resultat['nom_disque']."<br>";
}

// Après avoir fait tous mes traitements, je me déconnecte
mysqli_close($connection);
?>

Le script complet :

mysqli_num_rows($requete)

<?php
$connection=mysqli_connect("nom_hote", "login", "mot_de_passe", "base_de_donnees");
if (!$connection){
    die (mysqli_error());
}
else {
    $requete=mysqli_query($connection,"SELECT * FROM disques ORDER BY nom_disque");
    $total_requete=mysqli_num_rows($requete);
}

echo $total_requete ." disques<br>";

while($resultat=mysqli_fetch_array($requete)) {
    echo $resultat['nom_disque']."<br>";
}

mysqli_close($connection);
?>

Exercice : afficher les enregistrements de la table disque

Ce site est liste dans la categorie Enseignement et formation : Formations professionnelles de l'annuaire Référencement et Dictionnaire

Frédéric création Jardin | Concinnatis | Au petit grandeur | Lestrem TP | Jerico | Solumetal | Comonmarket | Chez Beau J'ai | Beukenne Traiteur | PDP Recouvrement | Agroé - Achat groupé d'énérgie | Achat goupé Sorea | CE LM énergie | placedesenergies.com | Gazon de la Folie | Dépannage pôele à  pellet | Création site web Nord | Rénovation habitat Pas de calais | Cuisine Bois | Créperie à  Valenciennes | Repar Coudre | DNS service | Archis 2 | 3MI | Tests d'orientation professionnels - Solutests | Ircl | Leblan promotion | Formation webmaster, PAO, CAO / DAO | Formateur Web, référencement et PAO | Formateur bureautique |