Meilleure pratique

Eléphanteau du PHP | 20 Messages

06 mars 2013, 12:32

Bonjour,

j'ai une question sur la meilleure pratique à utiliser sur un bout de programme que je suis en train d'écrire:

pseudo code
connexion à la table USER de la base TEST
tant qu'il y a des enregistrements
-->fonction chercher_une_valeur(USER_ID)
Fin

Définition de la fonction chercher_une_valeur(USER_ID)
connexion à la base SALAIRE de la base TEST
chercher la valeur du salaire si le USER_ID est trouvé.
Si oK, Doubler le salaire :-)
Fin


Si je me connecte à la base dans le programme principal, avec
$connexion_principale = new mysqli($GLOBALS['myServer'], $GLOBALS['myUser'], $GLOBALS['myPassword'], $GLOBALS['myDatabase']);
je peux interroger la base avec
$resultat = $connexion_principale->query($marequete);

Je récupère mon USER_ID et je l'envoie dans la fonction.

Dans la fonction je me reconnecte à la base avec
$connexion_secondaire = new mysqli($GLOBALS['myServer'], $GLOBALS['myUser'], $GLOBALS['myPassword'], $GLOBALS['myDatabase']);
je peux modifier la base avec
$resultat2 = $connexion_secondaire->query($marequetesecondaire);

Du coup j'ai deux connexions différentes à la même base.

Est ce académique, conforme aux bonnes pratiques ?

Merci de votre aide.

Maxime

blueguitarmaxime.blogspot.fr/

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2013, 12:34

Il vaudrait mieux ouvrir une connexion et passer cette connexion en paramètre de ta fonction ($connexion_principale).

Eléphanteau du PHP | 20 Messages

06 mars 2013, 12:52

Merci de ta réponse

je ne risque pas de perdre une partie du contexte ?

La connexion ne dépend elle pas de là où j'en suis dans ma requête ?

Si j'ai déjà lu 25 enregistrements, que je vais faire une autre requête dans la fonction, lorsque je reviens, vais je me repositionner sur le 26 ème enregistrement ?

En d'autres termes, cela influe-t-il sur un éventuel déplacement de curseurs ?

A+
Quelques pages sur le php et mysql => http://blueguitarmaxime.blogspot.fr/

Mammouth du PHP | 2278 Messages

06 mars 2013, 14:02

Si j'ai bien vu, ça peut se faire avec une seule requête:
Update xxx set salaire=salaire*2 where id = $id
ou quelque chose de ce genre
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

06 mars 2013, 14:32

Merci de ta réponse

je ne risque pas de perdre une partie du contexte ?

La connexion ne dépend elle pas de là où j'en suis dans ma requête ?

Si j'ai déjà lu 25 enregistrements, que je vais faire une autre requête dans la fonction, lorsque je reviens, vais je me repositionner sur le 26 ème enregistrement ?

En d'autres termes, cela influe-t-il sur un éventuel déplacement de curseurs ?

A+
Ne pas confondre connexion et resultSet. :)
La connexion est la route jusqu'à ta base de données.
Le resultSet est un camion l'empruntant parmi d'autres.
Et tes enregistrements sont le contenu du camion.

Sachant que lorsque tu fais une requête de type SELECT tu exportes les résultats de ta table dans une zone temporaire.
Donc si tu fais un SELECT puis que tu parcours x résultats, puis que tu insères un nouvel enregistrement (ou que tu fais une mise à jour) et que tu reviens à ton parcours : tu ne trouveras pas ce nouvel enregistrement sans devoir refaire un SELECT.

Eléphanteau du PHP | 20 Messages

06 mars 2013, 14:58

bon, je viens de tester en envoyant la variable de connexion ($mysqli) en paramètre dans la fonction.

le pragmatisme a payé, ça fonctionne.

Et dans le code c'est plus simple et plus joli :-)

Merci de vos différentes réponses.

Maxime
Quelques pages sur le php et mysql => http://blueguitarmaxime.blogspot.fr/