OVH Cloud OVH Cloud

Meilleure pratique : db handler

3 réponses
Avatar
Nicolas Ecarnot
Bonjour,

Quelle est d'après vous la meilleure pratique pour avoir accès, dans les
fonctions d'un grand projet php, à un handler de base de données ?

Je ne travaille que sur des projets modestes, et je place mon handler dans
un tableau que j'accède par des "global" dans mes fonctions.
Ca me parait largement perfectible (sans parler des connexions persistantes
que je n'utilise pas encore).

Mais vous, comment préferez-vous faire ?

--
Nicolas Ecarnot

3 réponses

Avatar
loufoque
Voici comment je fais.

au début de tous les scripts
$sql = new SQL;
puis global $sql quand besoin est.

Ensuite, la connexion ne s'effectue que dans le cas où il y en a besoin
(lors d'une requête par exemple) et non lors de la construction de la
classe, comme avec Pear par exemple.

Le principe des connexions persistantes est simple, on utilise
pconnect() à la place de connect().
Avatar
ED
Nicolas Ecarnot wrote:
Je ne travaille que sur des projets modestes, et je place mon handler dans
un tableau que j'accède par des "global" dans mes fonctions.


(je parle là de mysql mais ça vaut pour les autres)
Il ne faut pas hésiter à utiliser la fonction mysql_connect() à
profusion. PHP gère en effet lui-même un cache de ce coté là. Si on
redemande une connexion avec les mêmes paramètres PHP ne recontacte pas
le serveur mais réutilise (et retourne) l'ancienne.

Je ne dis pas que c'est forcément la meilleure solution mais il ne faut
pas avoir peur de faire plusieurs fois ces appels. En interne il n'y
aura pas de connexion ouverte après la première fois.

Cette fonctionnalité cumulée à la possibilité de ne rien remplir dans
mysql_connect() et d'utiliser les utilisateur / mot de passe / hote par
défaut définis dans le php.ini (ou via ini_set au lancement du script),
ça devient tout à fait utilisable.

--
Eric

Avatar
Marc
loufoque wrote:

Voici comment je fais.

au début de tous les scripts
$sql = new SQL;
puis global $sql quand besoin est.



moi aussi j'aurais une reponse de ce style assez orienté classes,
mais ca peut aussi se faire en variables globales avec fonctions.
C'est juste une affaire de gouts.


<?php

# page principale ou autre page :
include_once('Application.php');

$appli->db->query(....);
$appli->db->get_error();

$application->process_events();
$application->show();

?>

ensuite il suffit de creer 2 classes :

<?php

class Application extends Core {

var $db; # database objet

# initialisation ...
function Application(){
$this->db = new Database();
}
}

$appli = & new Application();

?>

<?php

class Database extends Core {

var $db; # database objet

# initialisation ...
function Database(){
$this->db = mysql_connect(...);
}

function query($sql){
return mysql_query($sql, $this->db);
}
}

$appli = & new Application();

?>