Problème avec "mysql_connect"

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Problème avec "mysql_connect"

    Bonjour !

    J'ai été confronté hier à un problème que je ne m'explique pas : sur un serveur, le plugin LazyDbBackup provoquait une page blanche lorsque l'utilisateur enregistrait les nouveaux paramètres, ce qui déclenche une sauvegarde de la base de données, et donc une connexion à celle-ci.
    J'ai pris en mains le site et activé le débogage qui m'a donné comme message :
    Fatal error: Call to undefined function mysql_connect() in ...
    Ayant vu que sous PHP 5.5 cette fonction disparaît, j'ai modifié mon code en "mysqli_connect" et j'ai eu la même erreur fatale.
    Pourtant le site est bien sur un serveur Apache, en PHP 5.4 et MySQL 5.5 ou 5.6 (de mémoire), et il fonctionne, donc se connecte à la base de données. Une copie du site sur mon serveur local ne provoque aucune erreur de connexion avec "mysql_connect".
    Je ne comprends donc pas comment cette fonction peut n'être pas disponible si Joomla! arrive à se connecter, sachant qu'il utilise mysql_connect ou mysqli_connect !

    Quelqu'un aurait-il une idée et une correction de code à me suggérer ? Merci d'avance !
    Robert
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Re : Problème avec "mysql_connect"

    Bonjour Robert

    Aucune idée, désolé. Je t'aurai suggéré mysqli_connect mais ça, tu l'as déjà fait.

    Un module Apache qui ne serait pas chargé ? (mais là aussi, tu as déjà vérifié).
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re : Problème avec "mysql_connect"

      Merci Christophe !

      Je n'ai pas pu vérifier grand-chose, n'ayant eu accès qu'à l'administration du site (je n'ai pas pensé aller voir dans les paramètres PHP affichés dans les infos système), mais ce message me laisse perplexe puisque Joomla! utilise bien ce type de fonction pour se connecter à la base...

      Précision : les paramètres PHP ne comportent pas mysql mais seulement mysqli, et je ne comprends pas pourquoi mon test avec mysqli_connect échouait aussi !
      Dernière édition par RobertG à 30/10/2014, 11h44
      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Re : Problème avec "mysql_connect"

        En analysant le code du plugin mysql_db_backup.class.php, ligne 90 on constate qu'il y a une requête mysql_connect probablement l'origine de l'erreur.

        Elle est utilisée plus bas dans la fonction retreive. Peut-être que cela provient de là, mais Marc devrait t'en dire plus vue que c'est lui concepteur... il a probablement ses raisons pour ne pas être passé par la class JFactory::getDBO()

        Tu pourrais faire un test en changeant les mysql en mysqli dans cette fonction ... ?
        Christophe
        http://www.webcrea.fr

        Commentaire


        • #5
          Re : Problème avec "mysql_connect"

          Marc n'est pas le concepteur, il m'avait simplement conseillé pour certaines modifications afin d'adapter ce plugin à la version 1.6, si je me souviens bien.

          Dès que j'ai vu que mysql_connect allait être supprimé de la version 5.5, et bien que le site tourne sur une 5.4 (avec seulement mysqli, pas mysql), j'ai modifié le code pour "mysqli_connect" et testé, et j'ai tout autant une page blanche sur ce site !
          Le problème vient du serveur, mais pourquoi Joomla! arrive-t-il à se connecter et pas le plugin ? Je l'ignore.

          Edit : après de nouveaux tests, même en utilisant JFactory::getDBO() j'ai d'autres erreurs ensuite sur des fonctions strictement "mysql" que le serveur ne fournit pas. Il me faut revoir tout le code. Je ne sais pas si j'en serai capable !
          Dernière édition par RobertG à 30/10/2014, 12h58
          "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
          MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

          Commentaire


          • #6
            Re : Problème avec "mysql_connect"

            J'ai finalement opté pour l'utilisation de PDO pour remplacer "mysql", donc beaucoup de modifications à faire...
            Je n'ai en effet pas su comment utiliser la connexion native de Joomla! pour lister ensuite les tables et leurs contenus afin de les exporter en SQL.

            J'arrive maintenant à sauvegarder, mais dans un premier temps, les caractères grecs de la table "virtuemart_states" étaient remplacés par des points d'interrogation... et après forçage de la connexion en UTF8, au lieu des caractères tels qu'ils doivent être affichés, je me retrouve avec les codes correspondants :
            INSERT INTO q9jr7_virtuemart_states VALUES ('503','1','84','0','ΑΡΓΟ& Lambda;ΙΔΑΣ','ΑΡ& Gamma;','ΑΡ','0','0','1','0000-00-00 00:00:00','0','0000-00-00 00:00:00','0','0000-00-00 00:00:00','0');
            INSERT INTO q9jr7_virtuemart_states VALUES ('504','1','84','0','ΑΡΚΑ&De lta;ΙΑΣ','ΑΡΚ','& Alpha;Κ','0','0','1','0000-00-00 00:00:00','0','0000-00-00 00:00:00','0','0000-00-00 00:00:00','0');
            Je n'ai pas tenté de voir ce que ça donne dans la gestion du site, mais à l'import dans une nouvelle base, cette ligne "504" provoque une erreur liée à ces codes, puisqu'au lieu de la valeur state_3_code de pays/région sur trois lettres, j'ai les trois premières lettres "&Al" :
            #1062 - Duplicate entry '1-84-&Al' for key 'idx_state_3_code'
            Je précise que dans le code-exemple que j'ai récupéré pour l'adapter, les valeurs des champs sont traitées ainsi :
            $value = htmlentities(addslashes($value));
            J'ai eu beau chercher comment récupérer les lettres telles qu'elles sont dans la base, je ne trouve pas...
            Si quelqu'un a la solution, merci d'avance de me la donner ou de m'indiquer une piste !
            Robert
            Dernière édition par RobertG à 31/10/2014, 17h37
            "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
            MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

            Commentaire


            • #7
              Re : Problème avec "mysql_connect"

              Je me réponds !

              En espérant confirmation de codeurs, j'ai tenté
              $value = htmlspecialchars(addslashes($value));
              et j'ai maintenant les caractères grecs corrects.

              Restera à vérifier le reste et à faire du ménage dans l'ancien code.
              "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
              MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                Re : Problème avec "mysql_connect"

                Bon, ma solution n'est pas la bonne !
                Selon les serveurs, c'est correct ou au contraire je me retrouve, que j'utilise la valeur brute ou traitée avec htmlentities ou htmlspecialchars, avec des séries de points d'interrogation à la place de caractères persans ou chinois par exemple (essai sur un site test multilingue 3.3.6).
                INSERT INTO c92qv_assets VALUES ('70','18','114','115','2','com_modules.module.93' ,'Main menu fa-IR','');
                INSERT INTO c92qv_assets VALUES ('71','8','40','43','2','com_content.category.13', '?????? (fa-ir)','');
                INSERT INTO c92qv_assets VALUES ('72','71','41','42','3','com_content.article.6',' ????? (fa-ir)','');
                INSERT INTO c92qv_assets VALUES ('73','18','116','117','2','com_modules.module.94' ,'Main menu th-TH','');
                INSERT INTO c92qv_assets VALUES ('74','8','44','47','2','com_content.category.14', '???????? (th-th)','');
                INSERT INTO c92qv_assets VALUES ('75','74','45','46','3','com_content.article.7',' ???????????? (th-th)','');
                INSERT INTO c92qv_assets VALUES ('76','18','118','119','2','com_modules.module.95' ,'Main menu zh-TW','');
                INSERT INTO c92qv_assets VALUES ('77','8','48','51','2','com_content.category.15', '?? (zh-tw)','');
                INSERT INTO c92qv_assets VALUES ('78','77','49','50','3','com_content.article.8',' ?? (zh-tw)','');
                Voici le code complet de la fonction qui récupère les données et les met dans une chaîne enregistrée ensuite :
                Code PHP:
                    private function getData($tableName){
                        try {
                            
                $stmt $this->handler->query('SELECT * FROM '.$tableName);
                            
                $q $stmt->fetchAll(PDO::FETCH_NUM);
                            
                $data '';
                            foreach (
                $q as $pieces){
                                foreach(
                $pieces as &$value){
                                    
                $value htmlspecialchars(addslashes($value));
                                }
                                
                $data .= 'INSERT INTO '$tableName .' VALUES (\'' implode('\',\''$pieces) . '\');'."\n";
                            }
                            return 
                $data;
                        } catch (
                PDOException $e){
                            
                $this->handler null;
                            
                $this->error[] = $e->getMessage();
                            return 
                false;
                        }
                    } 
                Merci de vos conseils !
                Robert

                Complément : il semblerait que le problème vienne directement de la lecture, y compris en ouvrant une connexion PDO à la base en spécifiant UTF8...
                Dernière édition par RobertG à 01/11/2014, 15h43
                "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire


                • #9
                  Re : Problème avec "mysql_connect"

                  Bonjour Robert,

                  Je réagis uniquement pour que tu ne penses pas être abandonné , je n'ai aucune réponse à te formuler... Perso, j'utilise mysqli_connect pour mes accès et jusqu'à présent je n'ai rencontré aucun souci avec. Le code est bien fonctionnel.

                  A toi de voir bien sûr mais si ce problème n'a été rencontré que sur un et un seul site, peut-être ne plus investiguer et perdre ton temps sur un truc aussi improbable que ça. Si c'était sur 10% de tes sites, je ne dirais pas ça mais ici, un seul serveur, ... Peut-être laisser cela au frigo et voir, plus tard, si le problème est rencontré par d'autres sites.

                  Reste que oui, il est bon de migrer vers mysqli puisque l'autre est déprécié.

                  Bonne soirée.
                  Christophe (cavo789)
                  Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                  Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                  Commentaire


                  • #10
                    Re : Problème avec "mysql_connect"

                    Merci Christophe, mais de toutes manières, je ne peux pas conserver ce plugin en l'état car plus ou moins vite, d'autres seront touchés avec la future disparition de ces fonctions "mysql", et j'ai préféré passer d'emblée à PDO.

                    Et d'ailleurs, on m'avait déjà signalé que le plugin posait des problèmes d'encodage avec certaines langues, et je l'ai confirmé sur le site multilingue en remettant la version officielle du plugin...

                    Bref, pour l'instant, je suis coincé...

                    Edit : j'ai modifié le code initial pour utiliser mysqli. Résultat, même souci avec les caractères grecs, farsi ou chinois.
                    Les bases testées sont encodées en UTF8, mais leurs collations sont du latin. Par contre, sur ldes bases qui sont en collation UTF8, tout est correct ! Reste que je ne peux pas agir sur les collations des utilisateurs...

                    INSERT INTO c92qv_categories VALUES ('13','71','1','23','24','1','fa-ir','com_content','مجموعه (fa-ir)','fa-ir','','','1','0','0000-00-00 00:00:00','1','{\"target\":\"\&quot ;,\"image\":\"\"}','','','{\&q uot;page_title\":\"\",\"author \":\"\",\"robots\":\&quot ;\"}','0','2014-11-01 09:50:28','0','0000-00-00 00:00:00','0','fa-IR','1');
                    INSERT INTO c92qv_categories VALUES ('14','74','1','25','26','1','th-th','com_content','หมวดหมู่ (th-th)','th-th','','','1','0','0000-00-00 00:00:00','1','{\"target\":\"\&quot ;,\"image\":\"\"}','','','{\&q uot;page_title\":\"\",\"author \":\"\",\"robots\":\&quot ;\"}','0','2014-11-01 09:50:28','0','0000-00-00 00:00:00','0','th-TH','1');
                    INSERT INTO c92qv_categories VALUES ('15','77','1','27','28','1','zh-tw','com_content','分類 (zh-tw)','zh-tw','','','1','0','0000-00-00 00:00:00','1','{\"target\":\"\&quot ;,\"image\":\"\"}','','','{\&q uot;page_title\":\"\",\"author \":\"\",\"robots\":\&quot ;\"}','0','2014-11-01 09:50:28','0','0000-00-00 00:00:00','0','zh-TW','1');
                    Dernière édition par RobertG à 01/11/2014, 21h59
                    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                    Commentaire


                    • #11
                      Re : Problème avec "mysql_connect"

                      Les dernières nouvelles...

                      Bon, ce n'est pas mon code qui est problématique, mais bien le charset des bases !

                      Je viens de faire des vérifications avec Virtuemart : si la base est en UTF8, collation latin1, dans la création de compte, si je choisis la Grèce ou la Russie comme pays, je n'ai aucun "état", mais si je modifie la collation en UTF8, je retrouve toute la liste des "états" utilisant des caractères grecs ou russes. Idem pour d'autres, mais par exemple pour l’Azerbaïdjan, que la collation soit latin1 ou UTF8, la liste des "états", bien que présente dans la table "virtuemart_states" reste vide.
                      Joomla! lui-même (ou Virtuemart) ne sait donc pas restituer ces caractères grecs, russes et autres, pourtant présents dans la base, si la collation de la base ne leur correspond pas.

                      Ceci dit, l'ennui est du coup que par code PHP, je ne vois pas comment restituer une base à l'identique : ni les fonctions mysql(i), ni celles PDO ne savent tout simplement cloner en "brut" dans un fichier texte...
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire


                      • #12
                        Re : Problème avec "mysql_connect"

                        J'avance !
                        Le code initial du plugin "LazyBackup" récupérait le charset de la base et le forçait, et j'ai naïvement suivi...
                        $db_charset = $this->_Query("SHOW VARIABLES LIKE 'character_set_database';") ;
                        $charset_row = mysqli_fetch_assoc( $db_charset );
                        $this->_Query( "SET NAMES '" . $charset_row['Value'] . "'" );
                        Avec ceci, ça semble beaucoup plus efficace !
                        $db_charset = $this->_Query("SHOW VARIABLES LIKE 'character_set_database';") ;
                        $charset_row = mysqli_fetch_assoc( $db_charset );
                        //$this->_Query( "SET NAMES '" . $charset_row['Value'] . "'" );
                        $this->_Query( "SET NAMES 'utf8'" );
                        En tout cas, les caractères grecs, russes et autres se retrouvent bien dans le dump. Reste à vérifier si la restauration est efficace (je fatigue à force de tester à la fois la version mysqli et la version PDO du plugin !).
                        "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                        MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                        Commentaire

                        Annonce

                        Réduire
                        Aucune annonce pour le moment.

                        Partenaire de l'association

                        Réduire

                        Hébergeur Web PlanetHoster
                        Travaille ...
                        X