Formation PUB010 : PHP, 2018 Travailler avec les données

Branchement à une base de données


Votre site Web devra fort probablement accéder à une base de données pour définir sa structure (ex : ses menus, ses configurations) et son contenu (ex : le texte à afficher dans les pages Web, les données manipulées, les usagers ayant droit de se connecter).

▼Publicité

Méthode privilégiée

Depuis PHP 5.5.0, la méthode privilégiée pour se connecter à une BD est mysqli. Attention : ne copiez pas ce code dans votre programme. Une version plus complète vous est donnée plus bas, après les explications qui s'imposent...

Syntaxe PHP

// attention : ce code est incomplet. Voir plus bas...

$mysqli = new mysqli("addresse_serveur_mysql", "usager_mysql", "mot_de_passe", "base_de_donnees");

...

$mysqli->close();

Sur un site en développement, la connexion se fera comme suit :

PHP

// attention : ce code est incomplet. Voir plus bas...

$mysqli = new mysqli("localhost", "root", "mysql", "garage");

...

$mysqli->close();

Le code d'usager et le mot de passe par défaut dépendent du système que vous utilisez.

Par exemple, avec AMPPS, c'est root avec le mot de passe mysql. Avec EasyPHP, c'est root avec un mot de passe à blanc.

Si vous travaillez sur un site en ligne, la commande aura plutôt cette forme :

PHP

// attention : ce code est incomplet. Voir plus bas...

$mysqli = new mysqli("localhost", "toto", "tata", "garage");

...

$mysqli->close();

ou :

PHP

// attention : ce code est incomplet. Voir plus bas...

$mysqli = new mysqli("nomdomaine.com", "toto", "tata", "garage");

...

$mysqli->close();

Dans ces derniers exemples, l'usager toto serait un usager MySQL ayant des droits restreints. Ceci permet de limiter les dégâts en cas où un trou de sécurité serait découvert.

Refermer la connexion

Dans les extraits de code précédents, vous avez sans doute remarqué l'utilisation de $mysqli->close(). Cette méthode s'occupe de refermer la connexion afin de libérer les ressources le plus tôt possible. Si vous l'omettez, la connexion sera automatiquement refermée lorsque le script PHP sera terminé.

La meilleure approche pour ne jamais oublier de refermer la connexion consiste à ouvrir systématiquement la connexion au début du code d'une page Web et la refermer à la fin.

Vérifier si la connexion a fonctionné

Il peut y avoir une foule de raisons qui empêchent une connexion, comme par exemple :

  • Serveur non disponible (problème de réseau, service arrêté, problème physique sur la machine, etc.)
  • Mauvais nom de base de données ou base de données effacée
  • Usager MySQL inexistant ou n'ayant pas les droits suffisants
  • Mauvais mot de passe
  • etc.

C'est pourquoi il importe de toujours vérifier si la connexion a fonctionné avant de poursuivre le traitement.

Si vous omettez cette vérification, le site Web affichera, dans le haut de l'écran, un message du genre « Warning: mysqli::mysqli(): (HY000/1049): Unknown database 'garage' ».

Ex :

Erreur mysqli_connect

Voici donc la syntaxe à utiliser pour éviter cet affichage non désiré. Cette fois, vous pouvez utiliser cette structure de code dans votre programme puisqu'elle offre les mécanismes de vérification et de sécurité appropriés.

Syntaxe PHP

@$mysqli = new mysqli("addresse_serveur_mysql", "usager_mysql", "mot_de_passe", "base_de_donnees");

if ($mysqli->connect_errno) {

    die("Échec lors de la connexion à la base de données");

}

Et à la fin de la page Web :

Syntaxe PHP

$mysqli->close();

Dans le cas où le branchement à la base de données n'est pas fait dans le même fichier que la fermeture de la connexion (ex : branchement dans configuration.inc et fermeture dans nettoyage.inc), le code sera plus robuste si on vérifie l'existance de $mysqli avant de tenter de fermer la connexion.

Syntaxe PHP

if (isset($mysqli) { 

    $mysqli->close();

}

Ex :

configuratiob.inc (PHP)

@$mysqli = new mysqli("localhost", "root", "mysql", "garage");

if ($mysqli->connect_errno) {

    die("Échec lors de la connexion à la base de données");

}

nettoyage.inc (PHP)

if (isset($mysqli) {

    $mysqli->close();

}

À remarquer :

  • L'ajout du @ devant l'appel de mysqli assure qu'en cas de problème, cette instruction ne générera pas l'affichage d'un message d'erreur. Sans ce @, l'affichage du message d'erreur pourrait ouvrir un trou de sécurité.
  • Si un erreur est détectée, son code sera enregistré dans $mysqli->connect_errno. Cette variable sera donc différente de 0, ce qui est évalué comme un vrai. Donc, le code présent dans le if sera exécuté.
  • La fonction die() affiche un message à l'écran puis termine l'exécution du programme. Son utilisation est correcte dans le contexte actuel. Cependant, il faut limiter l'utilisation de die() ailleurs dans le programme car dans la plupart des cas, on pourra utiliser une technique plus élégante.
  • Dans le die(), on prend soin d'encoder les accents car le die() survient avant l'instruction qui indique au navigateur le format d'encodage utilisé.

Pour plus d'information

« Connexions ». PHP. http://www.php.net/manual/fr/mysqli.quickstart.connections.php

« Extension mysqli ». PHP. http://php.net/manual/fr/book.mysqli.php

« Choisir une API ». PHP. http://www.php.net/manual/fr/mysqlinfo.api.choosing.php

« Interface procédurale et orientée objet ». PHP. http://php.net/manual/fr/mysqli.quickstart.dual-interface.php

Dernière révision le 13 février 2020
Merci de partager !

Site fièrement hébergé chez A2 Hosting.

Soumettre