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 :

Pas de valeur pour cette colonne


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut Pas de valeur pour cette colonne
    Bonjour,

    j'ai une requête dont les valeurs sont générée dynamiquement (PHP) et là, un cas où il n'y a pas de valeur pour une colonne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT into `license` (sesa, application_key, currently_active, activate_date, deactivate_date) VALUES
     
    (105017, 1, , ' 2016-08-16', ' 2019-11-8') ON DUPLICATE KEY UPDATE
     
        sesa = 105017, application_key = 1,currently_active = ,
     
        activate_date = ' 2016-08-16',deactivate_date = ' 2019-11-8'
    C'est visiblement incorrect :
    PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 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 ', ' 2016-08-16', ' 2019-11-8') ON DUPLICATE KEY UPDATE sesa = 105017, appli' at line 2 in C:\projets\ticket_rawsrc\vendor\rawsrc\PDOPlusPlus\PDOPlusPlus.php on line 673
    Comment faire SVP ?

    Le code PHP est le suivant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql_insert = <<<sql
    INSERT into `license` (sesa, application_key, currently_active, activate_date, deactivate_date) VALUES
    ({$ppi($SESAID,'int')}, {$ppi($application_key,'int')}, {$ppi($CURRENTLYACTIVE,'bool')}, {$ppi($ACTIVATEDATE)}, {$ppi
                ($DEACTIVATEDATE)}) ON DUPLICATE KEY UPDATE
        sesa = {$ppi($SESAID,'int')}, application_key = {$ppi($application_key,'int')},currently_active = {$ppi
                ($CURRENTLYACTIVE,'bool')},
        activate_date = {$ppi($ACTIVATEDATE)},deactivate_date = {$ppi($DEACTIVATEDATE)}
    sql;
     
     
    $id = $ppi->insert($sql_insert);
    J'utilise l'excellente classe de rawsrc

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Salut,
    Il y a une erreur dans ta requête.
    En la préparant avec des bindvalues, tu n'aurais pas cette erreur.
    La colonne currently_active n'est pas renseignée.
    Doubler la virgule, il me semble que ce n'est pas autorisé. ;-)

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ma5t3r Voir le message
    Doubler la virgule, il me semble que ce n'est pas autorisé. ;-)
    Même si ça l'était, j'aurais une erreur comme quoi le nombre de valeurs est incorrect (une de moins que de colonnes)

    Vu ta réponse, tu ne connais pas la classe de rawsrc. Pour l'instancier, j'ai fait $ppi = new PDOPlusPlus(PDOPlusPlus::MODE_SQL_DIRECT);. J'ai donc utilisé le mode le plus simple (MODE_SQL_DIRECT). Il existe 2 autres modes mais dans les 3 cas, les valeurs que l'on passe à la requête sont échappées.
    Dans le mode MODE_SQL_DIRECT par la méthode PDO quote, dans le mode MODE_PREPARE_VALUES par bindValue et dans le mode MODE_PREPARE_PARAMS par bindParam.
    Je pensais que échapper suffirait, mais non. Donc avant l'exécution de la requête, j'ai ajouté un contrôle : if (empty($CURRENTLYACTIVE)) $CURRENTLYACTIVE=NULL; et donc la colonne currently_active est renseignée.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 12/12/2011, 12h17
  2. Réponses: 5
    Dernier message: 11/02/2011, 09h04
  3. Réponses: 7
    Dernier message: 22/04/2010, 15h45
  4. Réponses: 1
    Dernier message: 09/05/2008, 11h57
  5. Réponses: 2
    Dernier message: 16/04/2008, 13h40

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