Bonjour,
Comment faire pour ouvrir ses accès BD en PDO, sans devoir donner tous les paramètres de connexion dans tous les scripts ?
Actuellement, j'accède à mes BD par PDO, puisque les fonctions mysql_* sont obsolètes.
La connexion BD en PDO requiert trois paramètres, que je stocke dans des variables de session.
En effet, je ne veux pas devoir les spécifier dans chaque script, chaque classe.
Ainsi, j'ai défini un fichier login.php, qui contient les codes d'accès à ma BD
1 2 3 4 5 6 7 8 9 10
| <?php
@session_start();
function login()
{
$_SESSION['playAdresse'] = 'localhost';
$_SESSION['playSrvDbNam'] = 'maBd';
$_SESSION['playSrvLogin'] = 'monLogin';
$_SESSION['playSrvPassw'] = 'monMotDePasse';
}
?> |
Ce script est invoqué dès la page d'entrée de mon application index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?
@session_start();
if(!isset($_SESSION['playAdresse']))
{
require_once('../classes/login.php');
login();
}
?>
<HTML>
... (contenu de ma page)
</HTML>
<?php
...
?> |
Ainsi, lorsque, dans une classe, je dois me connecter à une BD (ce que je ne fais quasi-jamais dans les scripts, qui sont de simples vues en MVC), j'invoque mes variables de session, pour créer mes PDO
Dans mon constructeur :
$this->$bdd = new PDO ('mysql:host='.$_SESSION['playAdresse'].';dbname='.$_SESSION['playSrvDbNam'], $_SESSION['playSrvLogin'], $_SESSION['playSrvPassw']);
Ensuite, je peux utiliser ma connexion $bdd, par exemple, dans une méthode de ma classe
1 2 3 4 5 6 7 8 9
| function getClients()
{
$codeSql = 'SELECT * FROM t_clients ORDER BY postal, nom WHERE magasin= ? ';
$monQuery = $this->$bdd->prepare($codeSql);
$monQuery->execute(array($this->id));
$lesClients = $monQuery->fetchall(PDO::FETCH_ASSOC);
$monQuery->closecursor();
return($lesClients);
} |
Bien que cela ne m'ait jamais posé problème, je me demande si, stocker les codes d'accès à la BD dans des variables de $_SESSION['...'] n'est pas dangereux, ou simplement risqué.
Ne fût-ce que parce qu'elles sont stockées dans un cookie session, sur la machine du client.
J'ai déjà regardé mon cookie session, dans Firefox, il est incompréhensible.
Le risque me semble donc théorique.
J'ai cherché du côté des define(), mais les define ne fonctionnent que pour le script en cours.
Quel est le meilleur moyen de stocker, une bonne fois pour toutes, les codes d'accès à la BD, qu'on invoque dans tous les scripts de son application ?
Dans un fichier de define() à inclure, qu'on doit ensuite inclure par un require_once('fichierLogin.php'); dans tous les scripts qui font des PDO ?
Une constante, un global, un superglobal ?
Merci de me donner la meilleure méthode, la plus sûre à vos yeux.
Christian.
Partager