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 :

mysqli_query() expects parameter 1 to be mysqli [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut mysqli_query() expects parameter 1 to be mysqli
    Bonjour,

    J'utilisais ce code avec php 5.0 et il fonctionnait tres bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     <?php
     
    $choix = $_POST['choix'];
    $ip = $_POST['IP'];
    $utilisateur = $_POST['utilisateur'];
    $motdepasse = $_POST['motdepasse'];
     
    include("formulaire_bd.php");
    connexion_bd();
     
     
    switch ($choix) { 
     
    case 'HD1' :
    $sql = "DELETE FROM `HD` WHERE `id`=1";
    mysql_query($sql) or die(mysql_error()); 
    $sql = mysql_query("INSERT INTO HD VALUES (1, '$ip', '$utilisateur', '$motdepasse')");
     
    $file = '
    -HD1-={
    	     IP= '.$_POST['IP'].'
                 user= '.$_POST['utilisateur'].'
                 psw= '.$_POST['motdepasse'].'
    }' ;
                 file_put_contents('/var/id.txt', $file, FILE_APPEND) ;
    break;  
     
    case 'MPEG3' :
    $sql = "DELETE FROM `MPEG` WHERE `id`=3";
    mysql_query($sql) or die(mysql_error());
    $sql = mysql_query("INSERT INTO MPEG VALUES (3, '$ip', '$utilisateur', '$motdepasse')");
     
    $file = '
    -MPEG3-={
    	     IP= '.$_POST['IP'].'
                 user= '.$_POST['utilisateur'].'
                 psw= '.$_POST['motdepasse'].'
    }' ;
                 file_put_contents('/var/id.txt', $file, FILE_APPEND) ;
    break; 
     
    }
     
    close_bd();
     
    ?>

    Code modifié pour l'adapter a php7.0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
     
    $choix = $_POST['choix'];
    $ip = $_POST['IP'];
    $utilisateur = $_POST['utilisateur'];
    $motdepasse = $_POST['motdepasse'];
     
    include("formulaire_bd.php");
    connexion_bd();
    global $cam;
     
    switch ($choix) { 
     
    case 'HD1' :
    $sql = "DELETE FROM `HD` WHERE `id`=1";
    mysqli_query($cam, $sql) or die(mysqli_connect_error()); 
    $sql = mysqli_query($cam,"INSERT INTO HD VALUES (1, '$ip', '$utilisateur', '$motdepasse')");
     
    $file = '
    -HD1-={
    	     IP= '.$_POST['IP'].'
                 user= '.$_POST['utilisateur'].'
                 psw= '.$_POST['motdepasse'].'
    }' ;
                 file_put_contents('/var/id.txt', $file, FILE_APPEND) ;
    break;  
     
     
    case 'MPEG1' :
    $sql = "DELETE FROM `MPEG` WHERE `id`=1";
    mysqli_query($cam,$sql) or die(mysqli_connect_error());
    $sql = mysqli_query($cam,"INSERT INTO MPEG VALUES (1, '$ip', '$utilisateur', '$motdepasse')");
     
    $file = '
    -MPEG1-={
    	     IP= '.$_POST['IP'].'
                 user= '.$_POST['utilisateur'].'
                 psw= '.$_POST['motdepasse'].'
    }' ;
                 file_put_contents('/var/id.txt', $file, FILE_APPEND) ;
    break;  
     
    }
     
    mysqli_close($cam);
     
    	?>

    fichier formulaire_bd.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    //fonction de connexion à la bd
    function connexion_bd(){
     
        $nom_du_serveur ="localhost";
        $nom_de_la_base ="cam";
        $nom_utilisateur ="user";
        $passe ="password";
     
        $cam = mysqli_connect ($nom_du_serveur,$nom_utilisateur,$passe,$nom_de_la_base);
        if (!$cam) {
            die('Connexion impossible : ' . mysqli_connect_error() . "<br/>");
        }
    }
    function close_bd()
    {
        mysqli_close($cam);
    }
     
    ?>

    Maintenant j'ai l'erreur mysqli_query() expects parameter 1 to be mysqli qui apparait dans les logs.

    Est ce que ca peut venir de ma variable global $cam qui n'est pas bien placée ? merci par avance

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    et si tu déclare la variable globale $cam avant l'include et avant l'appelle de la fonction connexion_bd() ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    toujours l'erreur :

    PHP Warning: mysqli_query() expects parameter 1 to be mysqli, null
    PHP Warning: mysqli_close() expects parameter 1 to be mysqli, null


    C'est bien la variable $cam qu'il faut indiquer au fonctions mysqli_query() et mysqli_close() ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    si je rajoute global $cam; dans le fichier formulaire_bd.php il semble que cela fonctionne est ce normal ?

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    fais en sorte que ta fonction connexion_db retourne $cam
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function connexion_bd(){
     
        $nom_du_serveur ="localhost";
        $nom_de_la_base ="cam";
        $nom_utilisateur ="user";
        $passe ="password";
     
        $cam = mysqli_connect ($nom_du_serveur,$nom_utilisateur,$passe,$nom_de_la_base);
        if (mysqli_connect_errno()) {
            die('Connexion impossible : ' . mysqli_connect_error() . "<br/>");
        }
    	return $cam;
    }
    et puis dans le fichier de traitement tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    global $cam;
    ...
    include("formulaire_bd.php");
    $cam=connexion_bd();
    ...
    mysqli_close($cam);

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    si je rajoute global $cam; dans le fichier formulaire_bd.php il semble que cela fonctionne est ce normal ?

  7. #7
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    Citation Envoyé par pierre2302
    si je rajoute global $cam; dans le fichier formulaire_bd.php il semble que cela fonctionne est ce normal ?
    tu es sûr que ça fonctionne ? parce que j'ai essayé de le faire mais ça n'a pas fonctionné.

    peut être que tu l'as mis DANS la fonction connexion_db, pas a l'extérieur, est-ce bien ça?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Oui j'ai rajouté global $cam; dans la fonction connexion_bd () comme ceci :

    fichier formulaire_bd.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    //fonction de connexion à la bd
    function connexion_bd(){
     
    global $cam;
     
        $nom_du_serveur ="localhost";
        $nom_de_la_base ="cam";
        $nom_utilisateur ="user";
        $passe ="password";
     
        $cam = mysqli_connect ($nom_du_serveur,$nom_utilisateur,$passe,$nom_de_la_base);
        if (!$cam) {
            die('Connexion impossible : ' . mysqli_connect_error() . "<br/>");
        }
    }
    function close_bd()
    {
        mysqli_close($cam);
    }
     
    ?>

  9. #9
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    oui, comme ça, ça fonctionne mais si par-contre si tu veux appeler la fonction close_db() dans le fichier index, ça va te renvoyer une erreur.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    //fonction de connexion à la bd
    function connexion_bd(){
     
    global $cam;
     
        $nom_du_serveur ="localhost";
        $nom_de_la_base ="cam";
        $nom_utilisateur ="user";
        $passe ="password";
     
        $cam = mysqli_connect ($nom_du_serveur,$nom_utilisateur,$passe,$nom_de_la_base);
        if (!$cam) {
            die('Connexion impossible : ' . mysqli_connect_error() . "<br/>");
        }
     
        mysqli_close($cam);
    }
     
    ?>
    Est ce que je peux placer mysqli_close($cam); dans la fonction connexion_bd comme ca ?

    où faut il aussi que je mette global $cam dans la fonction close_bd() ?

  11. #11
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    si tu insiste d'utiliser global (même si je ne vois pas trop l’intérêt dans ton cas), il va falloir déclarer la variable $cam en global dans chaque fonction qui doit s'en servir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $cam;
    function connexion_bd(){
         global $cam;//déclaration global de $cam	
        $nom_du_serveur ="localhost";
        $nom_de_la_base ="cam";
        $nom_utilisateur ="user";
        $passe ="password";
     
        $cam= mysqli_connect ($nom_du_serveur,$nom_utilisateur,$passe,$nom_de_la_base);
        if (mysqli_connect_errno()) {
            die('Connexion impossible : ' . mysqli_connect_error() . "<br/>");
        }
    }
    function close_bd()//cette fonction sera appelé dans l'autre fichier
    {
        global $cam;//déclaration encore une fois ici
        mysqli_close($cam);
    }
    fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $choix = $_POST['choix'];
    $ip = $_POST['IP'];
    $utilisateur = $_POST['utilisateur'];
    $motdepasse = $_POST['motdepasse'];
    include("formulaire_bd.php");
    connexion_bd();
    .....
    $sql = "select * FROM type_champ";
    mysqli_query($cam, $sql) or die(mysqli_connect_error()); 
     
    close_bd();//appelle a la fonction de fermeture de connexion ici

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Merci beaucoup pour l'exemple et pour l'aide que tu m'a apporté.

    " si tu insiste d'utiliser global " ,c'est parce que je ne sais pas comment faire autrement.

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 498
    Par défaut
    je t'ai montré deux méthodes différentes, moi je préfère la première, avec return $can.

    puis c'est a toi de choisir ce qui te convient le plus.

    résolu?

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Par défaut
    Oui d'accord.

    Je vais essayé avec return $cam

    Merci je mets en résolu.

  15. #15
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Quand j'ai dû passer de PHP 5.x à 7.0 j'ai eu le même souci. Ne voulant pas perdre de temps à reprendre mes scripts (mon site est un site perso) j'ai fait en sorte d'avoir le moins de modifications à faire.

    Sur tous mes scripts j'ai un include d'un fichier qui déclare la connexion à la BDD. J'ai créé des fonctions x_mysql_* puis ai fait un remplace des mysql_* en x_mysql_*. J'ai dû faire comme ça car en local j'étais encore en PHP 5.4. Si j'avais été en 7.0 en local il m'aurait suffi d'appeler mes fonctions du même nom que les anciennes fonctions mysql.


    https://www.developpez.net/forums/d1...nctionne-plus/

    https://www.developpez.net/forums/d1...-mysql-mysqli/

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

Discussions similaires

  1. mysql_result() expects parameter 1 to be resource
    Par FingR dans le forum Langage
    Réponses: 1
    Dernier message: 26/12/2009, 22h54
  2. Réponses: 1
    Dernier message: 18/05/2009, 16h37
  3. Expects parameter '@param', which was not supplied
    Par amirad dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2009, 12h46
  4. [MySQL] Message : Warning: mysqli_free_result() expects parameter 1 to be mysqli_result
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 18/02/2009, 15h03
  5. Erreur : file() expects parameter 2 to be long
    Par nicordi dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2008, 22h15

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