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 :

affectation de variables dans requete sql


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut affectation de variables dans requete sql
    Bonjour,

    Malgré de longues heures de recherche, je n'arrive pas à trouver la syntaxe d'un DELETE ou d'un SELECT.
    JE METS LES VARIABLES SUIVANTES :
    $c = table de la bdd
    $n = nom
    $p = prenom

    Je voudrais écrire la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query(DELETE FROM '.$c.' WHERE Nom ='.$n.'   AND  Prenom = '.$p.');
    ou éventuellement par une requête préparée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd -> prepare (......................)
    Quelqu'un peut-il me dépanner svp?
    D'avance MERCI.

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    merci de l'adresse.
    Je vais approfondir les subtiités sql.
    les quotes, double cotes etc n'auront plus de secret pour moi

  4. #4
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Je n'arrive vraiment pas à percer le mystère des guillemets ou apostrophes malgré la lecture que l'on m'a conseillée.
    Requêtes qui ne marchent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $bdd->exec(DELETE FROM  ".$_POST['$c']." WHERE PrénomMembre = ".$_POST['$p']." AND NomMembre = ".$_POST['$n']." );
    $bdd->exec('DELETE FROM  ".$_POST['$c']." WHERE PrénomMembre = ".$_POST['$p']." AND NomMembre = ".$_POST['$n']." ');
    $bdd->exec('DELETE FROM  $_POST['$c'] WHERE PrénomMembre = $_POST['$p'] AND NomMembre = $_POST['$n'] ');
    S'il vous plait, j'aurai vraiment besoin d'un coup de mains.

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Bonjour

    Citation Envoyé par marjan Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec('DELETE FROM  ".$_POST['$c']." WHERE PrénomMembre = ".$_POST['$p']." AND NomMembre = ".$_POST['$n']." ');
    Quand tu commences avec un ' il faut fermer avec un ' (même règle pour le guillemet).

    Et donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec("DELETE FROM ".$_POST['$c']." WHERE PrénomMembre = '".$_POST['$p']."' AND NomMembre = '".$_POST['$n']."'");
    Tu définis en fait des sous-chaînes qui seront concaténées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->exec("SOUS-CHAINE 1" . "SOUS-CHAINE 2" . "SOUS-CHAINE 3");
    Ceci compris, tu dois penser à tes critères : c'est du texte et donc quelque chose comme WHERE NomMember='NESTOR' ==> "WHERE NomMember='".$_POST['$n']."'"Note: je programme toujous en anglais aussi je suis étonné de voir que tu as un nom de champ avec un accent. Est-ce que PrénomMembre est réellement une colonne ? (je n'ai jamais testé; préférant ici FirstName)

    Note bis (en gras) : Ton code comme ci-dessus est extrêmement dangereux car pas sécurisé. Si tu as réellement quelque chose comme ça, jete un oeil à la technique dite SQL Injection. Là, en principe, avec ton code, je pourrais attaquer ton script PHP et p.ex. supprimer l'intégralité de ta base de données en injectant un DROP DATABASE comme ... nom de famille.

    Bonne journée.

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Merci à tous pour les conseils.

    Lorsque je mets textuellement (couper-coller) l'écriture proposée, j'ai l'erreur suivante :

    Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE PrénomMembre = '' AND NomMembre = ''' at line 1 in /customers/5/4/0/lXXXXXXX.fr/httpd.www/effacer.php:18 Stack trace: #0 /customers/5/4/0/XXXXXXXXXX.fr/httpd.www/effacer.php(18): PDO->exec('DELETE FROM WH...') #1 {main} thrown in /customers/5/4/0/XXXXXXXXXX.fr/httpd.www/effacer.php on line 18
    D'autre part, les accents dans le nom des colonnes ne m'ont jamais posé problème.
    J'ai un tas de scripts qui utilisent prénomMembre et ça fonctionne.
    Ça m'embête de changer le nom de la colonne, car j'ai vraiment un tas de scripts qui se servent de PrénomMembre.

    Enfin, lorsque la syntaxe sera comprise, je changerai bien évidemment la requête en requête préparée pour plus de sécurité.

  7. #7
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Salut

    Peux-tu faire un echo de ton query complet ?

    Pour le nom de la colonne ne change rien, je faisais juste part de mon étonnement car cela ne me serait jamais venu à l'esprit d'utiliser un accent (je code en anglais). Si cela fonctionne, ne change rien 😉

  8. #8
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Une petite question :
    Qu'entends-tu par echo du query ?

    Si je remplace les variables $c,$p,$n par des valeurs en dur tout marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $bdd = new PDO('mysql:host=XXXXXX.mysql;dbname=XXXXXX', 'XXXXXX, 'YYYYYY', array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $c = "conferences"
    $p = René
    $n = DUPONT"
    $bdd->exec("DELETE FROM ".$_POST['$c']." WHERE PrénomMembre = '".$_POST['$p']."' AND NomMembre = '".$_POST['$n']."'");

  9. #9
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Ta question me surprend... Par echo je pensais ... echo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
     
    $c = "conferences";
    $p = "René";
    $n = "DUPONT";
     
     
    echo "DELETE FROM ".$c." WHERE PrénomMembre = '".$p."' AND NomMembre = '".$n."'";
    Ce qui me donne DELETE FROM conferences WHERE PrénomMembre = 'René' AND NomMembre = 'DUPONT'Et cela me semble être un SQL correct toutefois; dans ton code, en lignes 5 et 6, ton code PHP est incorrect (il manque un guillemet d'ouverture en ligne 6, tu n'as pas de guillemet en ligne 5 et tu as oublié tes points virgules à la fin de deux lignes); ton code est donc non fonctionnel pour cette raison.

  10. #10
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Note aussi, à relire ton SQL, je ne comprends pas ce que font les champs PrénomMembre et NomMembre dans la table conference.

    J'ai l'impression (à toi de valider) que tu devrais avoir une table Membre avec un champ ID, un champ Nom, un champ Prénom, etc. et dans la table Conference, juste le MembreID.

    Conference et Membre sont deux objets totalement distincts, deux tables donc.

  11. #11
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 74
    Par défaut
    Merci beaucoup. J'ai testé, ça marche.
    Pour les erreurs PHP, c'est dû au copier-coller que j'ai fait entre mon script et la réponse que je t'ai faite.
    J'avais bien les guillemets, les points-virgule dans mon script.
    En ce qui concerne la table conférences j'aurai pu faire comme tu me le suggère -> table membres -->champs NomMembre, PrénomMembre,ID.
    je ferai probablement la transformation plus tard.

    Il ne me reste plus qu'à faire la requête préparée.

    Je te remercie, j'ai passé un temps fou avec ces guillemets et quote, j'ai une grosse lacune dans les concaténations. (je ne pensais pas..!)

    Encore merci.

  12. #12
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Citation Envoyé par marjan Voir le message
    je ferai probablement la transformation plus tard.
    Au plus tard tu le feras, au plus de boulot de refactoring tu seras confronté

  13. #13
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par marjan Voir le message

    j'ai passé un temps fou avec ces guillemets et quote, j'ai une grosse lacune dans les concaténations. (je ne pensais pas..!)
    Oui, ce truc fait un peu mal à la tête au début.
    Un des avantages des requêtes préparées (voir mon premier lien), c'est que tu ne t'occupes pas de cet aspect (gérer les guillemets SQL selon le type de données).
    Mais bon, comme tu devais travailler tes concaténations, tu n'as pas perdu ton temps.

    Sinon, oui, dans une table SQL, la bonne pratique dit "pas d'accents et que des minuscules".
    Si tu veux séparer les mots, le underscore est ton ami (ton_meilleur_ami). Mais bon, tu le sauras pour ton prochain développement.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Variable dans requete sql
    Par cisco59 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/09/2018, 08h37
  2. [MySQL] Syntaxe insertion variable dans requete SQL
    Par przvl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/06/2015, 15h34
  3. variable dans requete SQL pour delphi
    Par socooooool dans le forum Bases de données
    Réponses: 9
    Dernier message: 25/01/2013, 11h27
  4. variable dans requete sql
    Par xian21 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/01/2009, 12h14
  5. [Debutant] Variables dans requete SQL
    Par Freygolow dans le forum C#
    Réponses: 11
    Dernier message: 21/05/2008, 09h14

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