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 :

Syntaxe SQL et requête préparée (IF EXISTS)


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut Syntaxe SQL et requête préparée (IF EXISTS)
    Bonjour à tous,

    Je développe actuellement un site pour un ami et je suis confronté à un problème de syntaxe au niveau du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $req = $bdd->prepare('IF EXISTS (SELECT * FROM utilisateur_client WHERE (idClient= :idClient AND idUser= :idUser))
        UPDATE utilisateur_client SET (tauxClient= :tauxClient) WHERE (idClient= :idClient AND idUser = :idUser)
    ELSE
        INSERT INTO utilisateur_client VALUES (idClient= :idClient, idUser= :idUser, tauxClient = :tauxClient)');
    $req->execute(array(
    	'idClient' => htmlspecialchars($_GET['idClient']),
    	'idUser' => htmlspecialchars($_POST['idUser']),
    	'tauxClient' => htmlspecialchars($_POST['tauxClient']),
    	'idClient' => htmlspecialchars($_GET['idClient']),
    	'idClient' => htmlspecialchars($_GET['idClient']),
    	'idUser' => htmlspecialchars($_POST['idUser']),
    	'tauxClient' => htmlspecialchars($_POST['tauxClient'])
    	)) or die(print_r($req->errorInfo(), true));
    J'ai eu beau chercher, je n'ai pas trouvé de solution, voici le message d'erreur quand je teste :
    Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS (SELECT * FROM utilisateur_client WHERE (idClient= '1' AND idUser= '15' at line 1 )
    Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

    Bon week-end ensoleillé !

  2. #2
    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
    Par défaut
    IF EXISTS est une syntaxe de procédure stockée uniquement.

    Visiblement ce que tu cherches à faire c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO utilisateur_client VALUES (idClient= :idClient, idUser= :idUser, tauxClient = :tauxClient)
    ON DUPLICATE KEY UPDATE tauxClient= :tauxClient2
    Avec un clef UNIQUE sur les deux colonnes idClient et idUser.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 2
    Par défaut
    Bonjour,

    Votre solution semble marcher. Néanmoins, il subsiste un petit problème.
    La table utilisateur_client contient trois attributs (idClient, idUser et tauxClient) avec (#idClient,#idUser).

    Lorsque j'utilise votre proposition, soit il n'y a aucun tuple dans la table et il INSERT les valeurs 0,0 (pas les valeurs demandées) dans idClient, idUser tout en insérant la bonne valeur demandée dans tauxClient.

    Soit il existe un tuple et il ne fait que UPDATE le tuble avec le couple 0,0 (idClient, idUser) en changeant comme demandé le tauxClient.

    Je n'arrive pas à trouver d'où provient le problème. Merci de l'aide que vous pourrez m'apporter.

  4. #4
    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
    Par défaut
    Le problème vient des paramètres que tu passes dans l'execution de la requête.
    Dans le code du premier message on peut déjà s'ettonner que soient mélangées des données POST et GET.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Erreur syntaxe SQL DELETE avec sous requête
    Par jeanbenoit1987 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/12/2007, 12h14
  2. sql requête avec NOT EXISTS
    Par wang_xue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/10/2007, 19h48
  3. [SQL] Erreur de syntaxe sur ma requête UPDATE
    Par webasso dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/09/2007, 14h55
  4. Erreur de syntaxe dans une requête SQL
    Par amnesias dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 12h50
  5. [Syntaxe SQL]Un équivalent de "IF EXISTS" ?
    Par Quentin dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 25/03/2005, 18h09

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