IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Function avec mysqli fonctionne uniquement avec une ouverture de connexion à chaque appel [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Function avec mysqli fonctionne uniquement avec une ouverture de connexion à chaque appel
    Bonjour,

    J'espère ne pas m'être trompée de forum.
    J'ai un site avec uniquement des appels à ma base en mysql. OVH m'oblige à upgrader mon site et d'après mes recherches la fonction mysql est obsolète après php 5.2 (où je suis actuellement).
    Je voudrais donc modifier tous mes mysql en mysli et en profiter pour faire des functions qui me permettraient d'aller plus vite à modifier mon code.
    Donc côté mysqli je débute et côté fonction j'en connais pas lourd non plus (parce que besoin), je programme aussi en procédural.

    J'ai réussi à placer dans une function mysqli_query mais elle ne fonctionne que si j'ouvre la connexion juste avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function requete_sql($select){
      $mysqli = new mysqli($serveur, $user, $pass, $base);
      $sql = $mysqli->query($select);
      return $sql;
    }
    Sans la ligne "$mysqli = new mysqli($serveur, $user, $pass, $base);" j'ai un message d'erreur 'Call to a member function query() on a non-object in...' Ca me semble logique mais en même temps je ne sais pas résoudre l'erreur sans me connecter et je ne trouve pas logique de me connecter à chaque appel de la fonction ?

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ca semble logique à priori. Si tu ouvres ta connexion hors de ta fonction, la variable contenant cette connexion ne sera pas accessible à l'intérieur de la fonction, d'où l'erreur rencontrée.

    J'espère ne pas mettre tromper de forum.
    De forum, non, d'orthographe, si, un peu.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Bovino Voir le message
    De forum, non, d'orthographe, si, un peu.
    belle entrée en effet

    Bon ceci dit, cela ne répond pas complètement à ma question, car quand je teste cette function c'est juste après avoir ma connexion d'une façon générale en début de page comme je faisais avec mysql_et je n'ai même pas encore mis mon code dans un fichier séparé.
    Avec mysql_ j'ouvre ma connexion en début de page et je la ferme en fin de page.
    Avec mysqli_ je peux faire pareil si je tape x fois des requêtes toujours sur $mysqli, pas de souci, c'est dès que je passe par une fonction que ça décroche, même si la fonction est dans la page et non dans un fichier séparé.

    C'est pas une histoire d'objet ? J'y connais rien en objet

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonjour Nathalie,

    Bovino a pourtant répondu à ta question, tu utilises une variable dans ta fonction qui a été initialisée dans un autre contexte (ton script appelant).
    Il est donc logique que cette variable (objet ou non) ne soit pas reconnue dans ta fonction. Si tu utilisais un langage moins permissif que PHP tu n'aurai pas le droit de l'écrire de cette façon et ne pourrais même pas exécuter ton code.

    Ajoute cette variable ($mysqli) en paramètre de ta fonction ou passe la en global dans le corps de ta fonction si tu veux la réutiliser.

    Cordialement,
    Antoine

  5. #5
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Solution trouvée sur openclassromms :-)
    Fallait passer la connexion en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function requete_sql($select, $connexion)
    {
         $sql = $connexion->query($select);
       return $sql;
    }

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2014
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    donne un poissonbout de code à un homme il mangeraprogrammera un jour. apprends-lui à pêchercoder il mangeraprogrammera toute sa vie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/10/2010, 16h52
  2. requete fonctionnant uniquement avec champ protégé
    Par etarip971 dans le forum MySQL
    Réponses: 2
    Dernier message: 02/03/2010, 17h38
  3. Réponses: 2
    Dernier message: 10/07/2008, 14h30
  4. Réponses: 1
    Dernier message: 28/01/2008, 12h21
  5. Réponses: 2
    Dernier message: 22/09/2006, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo