Auteur Sujet: Question Con Sur Mysql_connect  (Lu 1951 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne ANTHONY

  • Débutant
  • *
  • Messages: 56
Question Con Sur Mysql_connect
« le: 25 juin 2003 à 08:45:33 »
Bonjour,
je cherche à optimiser au maximum la futur version de mon site, et je me demandais quelle était la meilleure technique pour utiliser mysql_connect...

En fait je me demande à partir de quelle moment la connection est ouverte (est-ce dès que je définis une variable du genre $truc=mysql_connect(blabla); ou la premiere fois que je fais appel à celle ci dans l'execution d'une requete du type $machin=mysql_query("select blabla", $truc); ) ?

Comment faites vous pour que vos connection soient ouvertes le plus intelligement possible ? Faut-il à chaque fois que j'ai une requete recopier tout le tralala
$truc=mysql_connect(blabla);
$base=mysql_db_select(blabla);
et seulement ensuite ce qui m'interesse :
$machin=mysql_query("select blabla", $truc);

?

merci d'avance :)
« Modifié: 25 juin 2003 à 08:46:22 par ANTHONY »
Anthony THIBAULT
www.hippocampestudio.com

Hors ligne Fozzy

  • VIP
  • *****
  • Messages: 1 787
    • http://kipt.mferon.com
Question Con Sur Mysql_connect
« Réponse #1 le: 25 juin 2003 à 08:59:45 »
le mieux c'est d'ouvrir la connexion juste au moment où on en a besoin. Donc tu crées un fonction qui encapsule tous ça et comme ça tu n'as plus besoin de le retaper à chaque fois.

Hors ligne ANTHONY

  • Débutant
  • *
  • Messages: 56
Question Con Sur Mysql_connect
« Réponse #2 le: 25 juin 2003 à 09:02:59 »
tu peux me filer un exemple de fonction qui ferait ça, parce que j'ai essayé hier soir justement de créer une telle fonction et comme ça marchait pas, j'en étais arrivé à la conclusion qu'une requete dans une fonction du type
function connect(){
ma requete
}
était impossible (genre une protection de je ne sais pas quoi :))

Merci de ta réponse et peut-etre de la prochaine ;)
Anthony THIBAULT
www.hippocampestudio.com

Hors ligne Fozzy

  • VIP
  • *****
  • Messages: 1 787
    • http://kipt.mferon.com
Question Con Sur Mysql_connect
« Réponse #3 le: 25 juin 2003 à 09:44:46 »
ah la la la la, qu'est-ce qu'y faut pas faire, tout leur mâcher !

la fonction get_data
prend une requete sql en entrée
renvoie un tableau de trois éléments
cnt : le nombre d'enregistrement de la requete
first : le premier de ces enregistrements
all : tous les enregistrements
$Mess_Err="";
@define("MODEDEBUG","1");
@define("BASEHOTE", "tu met ton serveur sql ici");
@define("BASELOGIN","tu met ton login sql ici");
@define("BASEPASS","tu met ton pass sql ici");
function get_data( $rq )
{
   $dbgerr;
   $reponse=false;
   if ( ($conn = @mysql_connect(BASEHOTE, BASELOGIN, BASEPASS)) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error();
   }
   else if ( @mysql_select_db (BASENAME) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error();
      @mysql_close($conn);
   }
   else if ( ( $res = @mysql_query( $rq, $conn ) ) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error()."<br>\n".$rq;
      @mysql_close($conn);
   }
   if ( $dbgerr != "" )
   {
      $reponse = Array( "cnt" => 0 ,
                       "first" => false ,
                       "all" => false ,
                       "err" => $dbgerr );
       if ( MODEDEBUG == 1 ) eco( $dbgerr );
   }
   else
   {
      $tmp = @mysql_fetch_array($res);
      @mysql_data_seek($res,0);
      $reponse = Array( "cnt" => @mysql_num_rows($res) ,
                       "first" => $tmp ,
                       "all" => $res );
       @mysql_close($conn);
   }
   return( $reponse );
}
function set_data( $rq )
{
   $reponse=false;
   if ( ($conn = @mysql_connect(BASEHOTE, BASELOGIN, BASEPASS)) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error();
   }
   else if ( @mysql_select_db (BASENAME) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error();
      @mysql_close($conn);
   }
   else if ( ( $res = @mysql_query( $rq, $conn ) ) == false )
   {
      $dbgerr = @mysql_errno().":".@mysql_error()."<br>\n".$rq;
      @mysql_close($conn);
   }
   else
   {
      $reponse = true;
       @mysql_close($conn);
   }
    if (( MODEDEBUG == 1 ) && ( $reponse==false )) eco( $dbgerr );
   return( $reponse );
}
 B)  

Hors ligne ANTHONY

  • Débutant
  • *
  • Messages: 56
Question Con Sur Mysql_connect
« Réponse #4 le: 25 juin 2003 à 10:45:14 »
oula !
merci.. beaucoup trop compliqué pour moi ça :)
mais merci quand même ;)
Anthony THIBAULT
www.hippocampestudio.com

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Question Con Sur Mysql_connect
« Réponse #5 le: 25 juin 2003 à 14:32:53 »
Une petite remarque de style :

Lorsque l'on fait des if concernant des booléens, il est totalement inutile de les comparer à true ou false. Par exemple :

if ( $toto == false ) ...

s'écrit tout simplement :

if ( !$toto ) ...

en effet, ( $toto == false ) est un booléen qui vaut false si $toto vaut true et true si $toto vaut false.

Donc, pour en revenir au code cité précédement :
if ( ($conn = @mysql_connect(BASEHOTE, BASELOGIN, BASEPASS)) == false )
...
 else if ( @mysql_select_db (BASENAME) == false )
On peut le simplifier en écrivant :
if ( !($conn = @mysql_connect(BASEHOTE, BASELOGIN, BASEPASS)))
...
 else if (!@mysql_select_db (BASENAME))

Menfin tout ça, c'est du pinaillage.
« Modifié: 25 juin 2003 à 14:34:05 par NaJ »
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Fozzy

  • VIP
  • *****
  • Messages: 1 787
    • http://kipt.mferon.com
Question Con Sur Mysql_connect
« Réponse #6 le: 25 juin 2003 à 14:35:42 »
Citer
merci.. beaucoup trop compliqué pour moi ça
y a rien de compliqué, tu met tes valeurs de bases de données dans les define, ensuite tu as juste à faire
$mavar = get_data("select * from matable");
dans $mavar["cnt"] tu as le nombre d'enreg
dans $mavar["first"] tu as le premier enreg
dans $mavar["all"] tu as tous les enregs

je vois rien de compliqué.

Citer
Lorsque l'on fait des if concernant des booléens, il est totalement inutile de les comparer à true ou false. Par exemple :

if ( $toto == false ) ...

s'écrit tout simplement :

if ( !$toto ) ...

en effet, ( $toto == false ) est un booléen qui vaut false si $toto vaut true et true si $toto vaut false.
je sais, mais c'est plus propre.
Citer
Menfin tout ça, c'est du pinaillage.
je suis bien d'accord  :P
« Modifié: 25 juin 2003 à 14:38:12 par Fozzy »

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Question Con Sur Mysql_connect
« Réponse #7 le: 25 juin 2003 à 15:31:22 »
Citer
je sais, mais c'est plus propre.
Si ($toto == false) est plus propre que (!$toto) alors,
(($toto == false) == true) est encore plus propre !!

Donc - avis perso -, ça n'est pas plus propre.

(pinaillage toujours, vous l'aurez compris)
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne ANTHONY

  • Débutant
  • *
  • Messages: 56
Question Con Sur Mysql_connect
« Réponse #8 le: 25 juin 2003 à 15:41:20 »
j'ai étudié ta fonction fozzy, et .. (roulement de tambours !!!)
j'ai compris ! (tadaaa)
donc ça marche et c'est vraiment super niquel comme truc, bravo et merci, j'en demandais pas tant :o)
Anthony THIBAULT
www.hippocampestudio.com

Hors ligne Jacques Ghémard

  • Habitué
  • **
  • Messages: 224
    • http://www.francaislibres.net
Question Con Sur Mysql_connect
« Réponse #9 le: 25 juin 2003 à 17:02:52 »
Bonjour,

Optimisons, optimisons, mais c'est difficile d'optimiser sans instrument pour mesurer le résultat (puisque nos temps d'exécution de script sont mélangés avec les temps des autres taches)

Mais, apres avoir essayé d'ouvrir et de fermer la liaison avec la base à chaque requete, j'ai constaté que sur mon PC les temps augmentaient prodigieusement.

Je suis donc revenu à un truc simple :

1) je prépare tout ce que je peux
2) J'ouvre j'envoie toutes mes requetes, je ferme
3) Je crée ma page avec les données lues

S'il y a une erreur, de toute façon, php me l'indique et je n'ai pas besoin d'alourdir mon code en essayant de les traiter.

Il vaut mieux une requete complexe faisant appel à plusieurs tables que plusieurs requetes simples.

Amicalement
Jacques

PS : je trouve que if ($Vrai) et  if (!$Vrai) est plus élégant que if ($Vrai == True) et ($Vrai == False) et probablemet plus rapide  :unsure:  

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Question Con Sur Mysql_connect
« Réponse #10 le: 25 juin 2003 à 17:42:11 »
Citer
1) je prépare tout ce que je peux
2) J'ouvre j'envoie toutes mes requetes, je ferme
3) Je crée ma page avec les données lues
J'utilise aussi ce schéma pour mes scripts.

Citer
...et probablemet plus rapide unsure.gif
Peut-être, mais alors de très très peu !!
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades