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_prepare sur plusieurs tables


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut mysqli_prepare sur plusieurs tables
    Bonjour,

    Je souhaiterai savoir s'il est possible de faire un mysqli_prepare sur plusieurs tables avec des jonctions ?

    Exemple :

    • SELECT id, Nom, Prenom, Sexe FROM utilisateurs, sexe WHERE utlisateurs.id_sexe = sexe.id AND id = ?



    Je vous remercie par avance pour votre précieuse aide

    A bientôt
    Gawel

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A partir du moment où la requête est syntaxiquement correcte (qu'elle marche sans exploser dans PhpMyAdmin par exemple), tu peux parfaitement en faire une requête préparée.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour le retour rapide

    Cependant, j'ai testé ma requête en direct et celle-ci fonctionne, alors que par le prepare, j'ai comme retour : "mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean" !
    c'est pour cela que cela m'étonne beaucoup....


  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui y'a pas de différence avec une requête "normale". Simplement les variables sont associées à des symboles ce qui rend les requêtes beaucoup plus sûres et aussi plus rapides quand s'agit de requêtes multiples.

    Au passage on utilise mysqli principalement pour mettre à jour d'anciens sites faits avec mysql. Sinon pour de nouveaux projets, pdo est bien plus agréable et pratique que mysqli. L'avenir (et le présent) c'est pdo.

    EDIT : oops je n'avais pas vu ta seconde question. Fais voir ton code.

  5. #5
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    BOnjour,

    Oui je sais bien que PDO est l'avenir (et le présent) mais je bosse sur un petit site uniquement pour moi et j'essaye de faire avec ce que je connais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $req_devis = mysqli_prepare($mysqli,'SELECT vignobles.vignoble,devis.prix, devis.date FROM vignobles,  devis WHERE vignobles.id = devis.id_vignoble AND devis.id_utilisateur = ?');
    mysqli_stmt_bind_param($req_devis,"i", $id);
    mysqli_stmt_execute($req_devis); 
    mysqli_stmt_bind_result($req_devis, $donnees_devis['vignobles.vignoble'], $donnees_devis['devis.prix'], $donnees_devis['devis.date']);
    while(mysqli_stmt_fetch($req_devis))
    Je te remercie

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça a l'air correct Pour le debug, ajoute une vérification de $req_devis et un affichage de l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req_devis = mysqli_prepare($mysqli,'SELECT vignobles.vignoble,devis.prix, devis.date FROM vignobles,  devis WHERE vignobles.id = devis.id_vignoble AND devis.id_utilisateur = ?');
    if ($req_devis === false) {
        die("Erreur : ".mysqli_error($mysqli));
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Au passage, fais les jointure avec JOIN
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT vignobles.vignoble,devis.prix, devis.date FROM vignobles
    JOIN devis ON vignobles.id = devis.id_vignoble
    WHERE devis.id_utilisateur = ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup a tous pour vos réponses, c'est cool

    Cependant, ma requête ne fonctionne toujours pas et me retourne : "Erreur : ".

    Soit aucune Erreur, mais mon prepare renvoi toujours "False".

    Je ne comprends pas vraiment

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo mysqli_connect_error();
    ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Encore moins

    Vraiment étrange, je dois faire un truc pas comme il faut.... Mais je n'arrive pas a trouver quoi !

    J'ai supprimer tout le code autour, au cas ou.... Mais rien non plus.

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux nous fournir le code minimum qui permettrait de reproduire ton problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    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
    	$req_devis = mysqli_prepare($mysqli,'SELECT vignobles.vignoble,devis.prix, devis.date FROM vignobles
    										 JOIN devis ON vignobles.id = devis.id_vignoble
    										 WHERE devis.id_utilisateur = ?');
    	if ($req_devis == false) {
    		die("Erreur : ".mysqli_error($mysqli));
     
    	}
    	else
    	{
    	mysqli_stmt_bind_param($req_devis,"i", $id);
    	mysqli_stmt_execute($req_devis); 
    	mysqli_stmt_bind_result($req_devis, $donnees_devis['millesime.Millesime'], $donnees_devis['devis.prix'], $donnees_devis['devis.date']);
    	while(mysqli_stmt_fetch($req_devis))
    	}

    Voila mon code...

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $mysqli n'est pas défini dans ce code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par sabotage Voir le message
    $mysqli n'est pas défini dans ce code.
    Merci pour ton retour.

    Désolé mais $mysqli est défini sur ma page index, par laquelle passe toute mes pages.

    J'ai quand même essayer en le redéfinissant, mais pas mieux....


  15. #15
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    je commence à être à court d'idées. On peut tenter un var_dump pour savoir ce que les variables ont dans le ventre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req_devis = mysqli_prepare($mysqli,'SELECT vignobles.vignoble,devis.prix, devis.date FROM vignobles
    										 JOIN devis ON vignobles.id = devis.id_vignoble
    										 WHERE devis.id_utilisateur = ?');
    var_dump($mysqli, $req_devis);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  16. #16
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci Celira.

    Voici le retour de cette fonction que je ne connais pas, et dont je ne comprend pas le retour

    object(mysqli)#5 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(9) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.7.10" ["server_version"]=> int(50710) ["stat"]=> string(136) "Uptime: 4574 Threads: 1 Questions: 1268 Slow queries: 0 Opens: 152 Flush tables: 1 Open tables: 145 Queries per second avg: 0.277" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(403) ["warning_count"]=> int(0) } bool(false)

    Si tu comprends quelque chose... Je suis impatient de lire la traduction

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai quand même essayer en le redéfinissant, mais pas mieux....
    Là il s'agit de produire un code minimum permettant de reproduire le problème.
    Donc pas de passer par x pages différentes.
    donc $mysqli doit être défini dans le seul script que tu dois lancer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En gros var_dump affiche tout ce qu'il ya dans la variable.
    Donc là on a le contenu de $mysql, dans lequel on voit bien qu'il n'y a a priori pas eu ni d'erreur de connexion (le bloc en rouge dans mon affichage un peu réarrangé), ni d'erreur sur une requête (le bloc en bleu)
    object(mysqli)#5 (19) { 
        ["affected_rows"]=> int(0) 
        ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $" 
        ["client_version"]=> int(50011) 
        ["connect_errno"]=> int(0) 
        ["connect_error"]=> NULL 
        ["errno"]=> int(0) 
        ["error"]=> string(0) "" 
        ["error_list"]=> array(0) { } 
        ["field_count"]=> int(9) 
        ["host_info"]=> string(20) "localhost via TCP/IP" 
        ["info"]=> NULL 
        ["insert_id"]=> int(0) 
        ["server_info"]=> string(6) "5.7.10" 
        ["server_version"]=> int(50710) 
        ["stat"]=> string(136) "Uptime: 4574 Threads: 1 Questions: 1268 Slow queries: 0 Opens: 152 Flush tables: 1 Open tables: 145 Queries per second avg: 0.277" 
        ["sqlstate"]=> string(5) "00000" 
        ["protocol_version"]=> int(10) 
        ["thread_id"]=> int(403) 
        ["warning_count"]=> int(0) 
    } 
    et le contenu de $req_devis, qui est clairement false
    Et là, je m'avoue vaincue

    Sinon ce que sabotage te demande, c'est d'extraire de ton code le minimum nécessaire pour tenter de l'exécuter dans son propre serveur. Il va falloir la structure des 2 tables concernées, plus un mini-script avec la connexion et la requête.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  19. #19
    Candidat au Club
    Homme Profil pro
    Assistant logistique
    Inscrit en
    Octobre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Assistant logistique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Celira, Sabotage

    Merci en tout cas, et je pense que je vais me pencher sur la methode PDO, qui est, a priori, plus simple et plus efficace

    Merci d'avoir essayer

  20. #20
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Oui c'est une bonne idée et un bon investissement

Discussions similaires

  1. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 12h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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