Rappel : si vous travaillez sur votre ordinateur personnel, vous devez avoir créer la base de données de test pour que les exemples puissent être utilisés.
La connexion à la base de données doit être faite dans chaque script qui va utiliser cette base. Il faut donc la centraliser dans une fonction placée dans une bibliothèque pour que toute modification en soit simplifiée. Les identifiants de connexion seront en effet différent selon que l'on est en phase de développement, sur notre serveur (personnelle ou de l'entreprise), ou en phase de production (le site est accessible depuis le Web et sur le serveur d'un hébergeur).
Pour faire correctement les choses il faut avoir 2 fichiers :
Nous utiliserons notre bibliothèque (bib_fonctions.php) pour y mettre notre fonction de connexion, et un nouveau fichier (bib_params.php) pour y mettre les paramètres de notre application.
Contenu du fichier bib_params.php
<?php
//
// Paramètres de l'application
//
/* Comme le fichier des paramètres doit être (normalement)
* appelé par tous les scripts, nous pouvons y placer toutes
* les initialisations qui devraient être faites.
* Nous pourrions y mettre ob_start et session_start() par
* exemple. Elles n'y sont pas pour que vous ne perdiez pas
* de vue la bufferisation des sorties.
*/
//ob_start();
//session_start();
/* Une des façons les plus simples de définir des paramètres
* est de définir des constantes car elles sont "superglobales"
*/
// Phase de développement (TRUE) ou de production (FALSE)
// Permet d'afficher des messages de débuggage (TRUE)
define('IS_DEV', TRUE);
// Paramètres base de données
define('BD_SERVEUR', 'localhost');
define('BD_USER', 'tuto_user');
define('BD_PASS', 'tuto_pass');
define('BD_NOM', 'php_tuto');
?>
Nouvelles fonctions dans le fichier bib_fonctions.php
//___________________________________________________________________
/**
* Connexion à une base de données MySQL.
* En cas d'erreur de connexion le script est arrêté.
*
* @return resource connecteur à la base de données
*/
function bdConnecter() {
$bd = mysqli_connect(BD_SERVEUR, BD_USER, BD_PASS, BD_NOM);
if ($bd !== FALSE) {
// mysqli_set_charset() définit le jeu de caractères
// par défaut à utiliser lors de l'envoi de données
// depuis et vers le serveur de base de données.
mysqli_set_charset($bd, 'latin1') or
bdErreurExit('<h4>Erreur lors du chargement
du jeu de caractères latin1</h4>');
return $bd; // Sortie connexion OK
}
// Erreur de connexion
// Collecte des informations facilitant le debugage
$msg = '<h4>Erreur de connexion base MySQL</h4>'
.'<div style="margin: 20px auto; width: 350px;">'
.'BD_SERVEUR : '.BD_SERVEUR
.'<br>BD_USER : '.BD_USER
.'<br>BD_PASS : '.BD_PASS
.'<br>BD_NOM : '.BD_NOM
.'<p>Erreur MySQL numéro : '.mysqli_connect_errno($bd)
.'<br>'.mysqli_connect_error($bd)
.'</div>';
bdErreurExit($msg);
}
//___________________________________________________________________
/**
* Arrêt du script si erreur base de données.
* La fonction arrête le script, avec affichage de message d'erreur
* si on est en phase de développement.
*
* @param string $msg Message affiché ou stocké.
*/
function bdErreurExit($msg) {
ob_end_clean(); // Supression de tout ce qui
// a pu être déja généré
// Si on est en phase de développement, on affiche le message
if (IS_DEV) {
htmlDebut('Erreur base de données');
echo $msg;
htmlFin();
exit();
}
// Si on est en phase de production on stocke les
// informations de débuggage dans un fichier d'erreurs
// et on affiche un message sibyllin.
$buffer = date('d/m/Y H:i:s')."\n$msg\n";
error_log($buffer, 3, 'erreurs_bd.txt');
htmlDebut('Maintenance en cours');
// Gros mensonge
echo 'Notre site est momentanément indisponible ',
'pour cause de maintenance. Merci de ré-essayer ',
'dans quelques instants.';
htmlFin();
exit();
}
Notez :
mysqli_set_charset($bd, 'latin1') or
bdErreurExit('<h4>Erreur lors du chargement du jeu de
caractères latin1</h4>');
est donc strictement équivalente à :
if (!mysqli_set_charset($bd, 'latin1')){
bdErreurExit('<h4>Erreur lors du chargement du jeu de
caractères latin1</h4>');
}
La première instruction est simplement plus concise.
Résultat :
Si vous travailler sur votre ordinateur personnel vous pouvez arrêter le serveur MySQL (et laisser bien sûr le serveur apache) pour tester en simulant un serveur de bases de données en panne.