Connexion DB

zilliq
Invité n'ayant pas de compte PHPfrance

21 oct. 2010, 11:55

Bonjour,

Jusqu'à présent, j'utilisais les fonctions mysql_ pour gérer mes connexions à la db. En résumé, pour chaque script, j'initialise dans un fichier de config la connexion à la db et en fin de script je la cloture. Ensuite j'utilise cette connexion ouverture pour chaque lecture et écriture.

Vu que PDO semble devenir le nouveau standard, j'ai voulu tester cela. Donc rebelote: connexion initialisée dans un fichier de config. Seulement quand j'essaie d'utiliser l'objet instancié à l'intérieur une classe, j'ai un genre "Call to a member function query() on a non-object".

Du coup je me demande si ma méthode de travail n'est pas scabreuse depuis le début. J'ai un peu farfouillé le net mais je n'ai rien trouvé de probant. Quelle est la "best pratice" en matière de connexion db? Faut-il ouvrir la connexion à chaque fois qu'on fait appel à une db?

Merci d'éclairer ma lanterne :)

ViPHP
ViPHP | 5462 Messages

21 oct. 2010, 11:58

montre ce que t'as fais
a la difference de mysql_* c'est que tu dois récupérer l'objet a chaque fois

zilliq
Invité n'ayant pas de compte PHPfrance

22 oct. 2010, 11:09

Ma question porte sur le concept en général, pas sur mon script en particulier. Quelles sont les bonnes pratiques au niveau de la gestion de la connexion à la db?

Petit nouveau ! | 4 Messages

23 oct. 2010, 20:37

Perso j'ai créé un include contenant les paramètres de connexion à la base de deonnées. Cet include est appelé en début de chaque page PHP

Contenu de include.inc :
$mysqlser='localhost';
$mysqllog='login';
$mysqlpass='motdepasse';
$mysqlbasek='nomdelabase';
$ouverturebase=mysql_connect($mysqlser,$mysqllog,$mysqlpass);
mysql_select_db($mysqlbasek);

Puis dans la page je me connecte aux tables de la manière suivante (par exemple) :
include 'connexion.inc';

$requet="SELECT * FROM $livredor ORDER BY date DESC LIMIT $liminf,$pagez";
$resulta=@mysql_query($requet);
$test=@mysql_num_rows($resulta);
if ($test){
while($enreg=mysql_fetch_array($resulta)){
$variable=$enreg['variable'];
}
}

ViPHP
ViPHP | 5462 Messages

24 oct. 2010, 00:14

c'est pas avec PDO ca, et évite les @ :wink:

Petit nouveau ! | 4 Messages

24 oct. 2010, 10:06

Ah mince, j'ai pâs lu PDO, désolé. OK, je sors.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 oct. 2010, 10:35

Que ce soit en PDO ou non, le principe reste le même : tu ouvres une connexion à la bdd et tu l'utilises ensuite. L'intérêt de PDO c'est (théoriquement) de pouvoir coder sans avoir à se préoccuper des spécificités du SGBD. L'idée c'est de pouvoir faire des requêtes du genre "SELECT mon_champ FROM ma_table" sans avoir à se soucier de savoir s'il faut un , un odbc_connect mysqli_connect ou des odbc_fetch_*, mysql_fetch_*, etc. (Ca reste théorique parce que chaque sgbd a ses spécificités et syntaxes : limit ne fonctionne que sous mysql, oracle 8 ne gère pas les jointures avec des joins, ...)

L'objectif de PDO est uniquement de pouvoir envoyer une requête et récupérer le résultat sans se poser plus de question :)

A partir de là, le principe est toujours le même, tu ouvres une connexion avec une instance de pdo comme tu le faisais en récupérant le résultat de mysql_connect(). Dans les deux cas, pour pouvoir l'utiliser dans une fonction ou dans une classe il te faut soit la passer en argument, soit déclarer ta variable comme globale pour pouvoir exploiter ta variable externe à l'intérieur de ta fonction ou de ta classe.

Tu peux donc conserver tes habitudes en ouvrant ta connexion avec un fichier de configuration et en l'exploitant ensuite dans ton code :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

zilliq
Invité n'ayant pas de compte PHPfrance

24 oct. 2010, 21:14

OK merci :)