Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de mysqli_query dans les fonctions PHP

Soucis suite au passage de PHP 5.3 à 5.5 (mysql_ devient mysqli_)

Sujet résolu
    4 décembre 2013 à 4:34:24

    Bonjour à tous,

    Je viens de passer de PHP 5.3.1 à PHP 5.5.3, je dois donc modifier mes fonctions utilisant mysql_connect(), mysql_query().. par mysqli_connect(), mysqli_query()..

    Cela fonctionne bien mais mon soucis est quand j'utilise mysqli_query() à l'intérieur d'une fonction :

    Voici le code que j'utilisais avant :

    <?php
    mysql_connect('localhost', 'user', 'password') or die(mysql_error());
    mysql_select_db('base') or die(mysql_error());
    
    function affiche_age($user)
    {
      $query = mysql_query("SELECT age FROM utilisateurs WHERE nom='$user'") or die(mysql_error());
      $rep = mysql_fetch_assoc($query);
      return $rep['age'];
    }
    
    echo affiche_age('jean');
    ?>

    Voici le nouveau code :

    <?php
    $sql = mysqli_connect('localhost', 'user', 'password', 'base') or die(mysqli_error($sql));
    
    function affiche_age($user, $sql)
    {
      $query = mysqli_query($sql, "SELECT age FROM utilisateurs WHERE nom='$user'") or die(mysqli_error($sql));
      $rep = mysqli_fetch_assoc($query);
      return $rep['age'];
    }
    
    echo affiche_age('jean', $sql);
    ?>

    Ce code fonctionne mais j'aimerai bien ne pas avoir à mettre la variable $sql comme argument à ma fonction affiche_age();

    En gros je voudrai pouvoir utiliser la fonction affiche_age('jean') et non affiche_age('jean', $sql) avec mysqli.

    Cela est il possible? Cela m'éviterai d'avoir à modifier la plupart de mes anciens scripts.

    Merci d'avance! :)

    -
    Edité par barbachose 4 décembre 2013 à 4:36:45

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2013 à 8:24:56

      barbachose a écrit:

       passer de PHP 5.3.1 à PHP 5.5.3, je dois donc modifier mes fonctions utilisant mysql_connect()

      Bonjour,

      mysql_ ** ne va disparaître que pour une prochaine version, en 5.5 il n'y a pas d'obligation (pour la version 7.0 ?).

      Pas le choix, si tu ne veux pas modifier ton code tu n'as que global $sql;

      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2013 à 8:35:40

        Je ne connaissais pas global, merci je vais tester :)

        Par contre à propos de mysqli :

        mysql_query

        (PHP 4, PHP 5)

        Avertissement

        Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur. À la place, les extensions MySQLi ou PDO_MySQL doivent être utilisées. Voir aussi le guideMySQL : choix de l'API ainsi que la FAQ associée pour plus d'information. Voici les alternatives à cette fonction :

        -
        Edité par barbachose 4 décembre 2013 à 8:39:09

        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2013 à 8:43:58

          barbachose a écrit:

          Cette extension est obsolète depuis PHP 5.5.0, et sera supprimée dans le futur.


          Oui :) mais le mot futur, signifie peut-être la version 5.6 ... ou la prochaine majeure (6 ou 7). Je veux juste te dire que tes script peuvent encore tourner 1..2 ans, tu n'as pas obligation et ce n'est pas urgent. tu es en PHP 5.5.3 et ca marche encore très bien!

          Donc, pour moi, il est plus simple de se prendre 1 an pour modifier tous tes script, et a ce moment la , tu as le temps de tout bien réécrire (passer a pdo), car ici, utiliser global c'est du bidouillage juste bon en cas d'urgence.

          -
          Edité par papajoker 4 décembre 2013 à 8:54:09

          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2013 à 8:50:13

            Au contraire, c'est super urgent. Que le script semble marcher est une chose, que tu sois limité en terme de performances, de fonctionnalités, de sécurité en est une autre et ça c'est vraiment important. Les fonctions commençant par mysql_ ont été dépréciée car il a été jugé plus efficace de recréer deux extensions plus en phase avec les nouvelles versions de MySQL et de garder celle là comme "legacy" pour ensuite la virer. Si tu veux utiliser MySQL 5.5 voire (le must) 5.6, tu ne peux pas utiliser les fonctions mysql_ car elles buggent avec ces nouvelles versions du sgbd. Tout le monde devrait déjà être passé à PDO ou mysqli depuis deux ans, c'est une honte que des personnes aillent encore dire "ça marche pour moi alors je continue avec mysql_".

            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2013 à 8:59:00

              Merci je viens de tester çà fonctionne en utilisant la variable globale :)

              Voila mon nouveau code :

              <?php
              $sql = mysqli_connect('localhost', 'user', 'password', 'base') or die(mysqli_error($sql));
               
              function affiche_age($user)
              {
                $sql = $GLOBALS['sql'];
                $query = mysqli_query($sql, "SELECT age FROM utilisateurs WHERE nom='$user'") or die(mysqli_error($sql));
                $rep = mysqli_fetch_assoc($query);
                return $rep['age'];
              }
               
              echo affiche_age('jean');
              ?>



              -
              Edité par barbachose 4 décembre 2013 à 9:00:16

              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2013 à 9:09:15

                artragis a écrit:

                 c'est une honte que des personnes aillent encore dire "ça marche pour moi alors je continue avec mysql_".


                Je ne dirais jamais ca puisque je suis passé a autre chose depuis des années !

                Mais toi tu es l'ayatollah du php ! de quel droit tu te permets de dire au développeurs qu'il doivent réécrire leurs codes d'urgence, les gens ont le droits d'avoir une vie en dehors de php; imposer à un programmeur du dimanche des journées de code pour ton seul plaisir bonjour l'intégrisme.

                Je préfère dire qu'il faut migré, c'est une évidence; et la meilleure façon de le faire est de prendre son temps et pourquoi pas profiter de cette migration  pour bien réécriture son site ou même écrire une nouvelle version a partir de rien. Lire , faire des tutos sur pdo, sur la class mysqli, avant de recoder, il n'y a pas urgence :)

                @barbachose: je t'ai parlé de global et pas de $GLOBALS ! global est un mot clé php qui change la portée d'une variable.

                -
                Edité par papajoker 4 décembre 2013 à 9:17:36

                • Partager sur Facebook
                • Partager sur Twitter
                  4 décembre 2013 à 9:24:13

                  Mais toi tu es l'ayatollah du php ! de quel droit tu te permets de dire au développeurs qu'il doivent réécrire leurs codes d'urgence,

                  Donc si on dit aux gens "ça fait 10 ans qu'on vous dit que faire ça c'est mal, maintenant il serait temps de vous bouger", c'est prendre pour un grand maître? Oui on doit réécrire d'urgence les codes car -ne serait-ce que par sécurité- les choses ont tellement évolué que c'est la valeur même du programme qui est touchée. Eh oui, aujourd'hui les gens sont passés à Mysql 5, et la migration vers 5.6 commence. Cette extension n'est même plus maintenue, alors de ce fait, même si ton DSI s'est fait chier à migrer vers une nouvelle version de mysql, tu te retrouve à lui envoyer des failles juste parce que tu n'as pas voulu utiliser un code correct, parce que franchement les "ayatollah du php, moi je les mets là où je pense".

                  Je ne suis pas un grand manitou du php, je ne suis même pas un pro. Par contre, je me suis documenté, ça sert à ça internet. Et bizarrement, ce que je dis ici sur le site du zéro, y'a des gens qui le disent très sérieusement (et de manière parfois bien plus brusque) dans des conférences de pro.

                  Quant au distingo "programmeur du dimanche/pro" il n'a lieu d'être que dans l'ambition des projets créés, pas dans la rigueur à y mettre.

                  Oui il faut migrer, oui il faut le faire pour que cette migration soit finie assez rapidement. Oui un programmeur du dimanche aura plus de temps pour le faire qu'un pro car son application sera moins critique, mais non, il ne devra pas attendre que tout soit cassé.

                  De toute façon, on s'en fiche, notre ami a décidé d'utiliser mysqli (PS : en passant à 5.5 il aurait de toute façon eu le même problème de portée puisque mysql_ fonctionne désormais avec l'argument passé à la fonction query. Il a donc eu un très bon réflexe de changer sa ligne de connexion.)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 décembre 2013 à 9:34:13

                    papajoker a écrit:

                    @barbachose: je t'ai parlé de global et pas de $GLOBALS ! global est un mot clé php qui change la portée d'une variable.


                    Je ne connaissais pas les variables globales, j'ai eu un petit cours ici : http://php.net/manual/fr/language.variables.scope.php

                    Apparemment la seule différence entre global $sql; et $sql = $GLOBALS['sql']; est de pouvoir changer le nom de la variable dans la fonction.. je me trompe? (exemple $nouveau_nom = $GLOBALS['sql'];)

                    En tout cas ca marche aussi avec :

                    <?php
                    $sql = mysqli_connect('localhost', 'user', 'password', 'base') or die(mysqli_error($sql));
                      
                    function affiche_age($user)
                    {
                      global $sql;
                      $query = mysqli_query($sql, "SELECT age FROM utilisateurs WHERE nom='$user'") or die(mysqli_error($sql));
                      $rep = mysqli_fetch_assoc($query);
                      return $rep['age'];
                    }
                      
                    echo affiche_age('jean');
                    ?>

                    -
                    Edité par barbachose 4 décembre 2013 à 9:44:21

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 décembre 2013 à 10:53:31

                      il faut peut-être profiter de la maj depuis 5.4 :
                      function affiche_age($user)
                      {
                        global $sql;
                        $query = mysqli_query($sql, "SELECT age FROM utilisateurs WHERE nom='$user'") or die(mysqli_error($sql));
                        return mysqli_fetch_assoc($query)['age'];
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Utilisation de mysqli_query dans les fonctions PHP

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown