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

Requêtes MySQL Discussion :

Inverser tinyint(1)


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 283
    Points : 225
    Points
    225
    Par défaut Inverser tinyint(1)
    Bonjour,

    Comment inverser un type tinyint(1) ?
    MySql blocked = tinyint(1)

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = NOT `blocked` WHERE username = ?");
    $this->sql->bind_param('s', $username);
    $this->sql->execute();

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = IF(`blocked` = 0, 1, 0) WHERE username = ?");
    $this->sql->bind_param('s', $username);
    $this->sql->execute();

    En vain cela ne fonctionne pas.

    Alors la solution que j'ai trouvé c’est de récupérè la valeur de `blocked` puis ajouter une condition en fonction de sa valeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if ($row['blocked'] == 1) {
         $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = 0 WHERE username = ?");
    }
     
     if ($row['blocked'] == 0) {
          $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = 1 WHERE username = ?");
    }
     
    $this->sql->bind_param('s', $username);
    $this->sql->execute();

    Je ne comprend pas pourquoi le `blocked` = NOT `blocked` ne fonctionne pas (NOT 0 = 1 , NOT 1 = 0).

    Merci
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.
    Ce n’est pas un bogue - c’est une fonctionnalité non documentée.

  2. #2
    Membre actif Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 283
    Points : 225
    Points
    225
    Par défaut
    La requête fonctionne en direct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `users` SET `blocked` = (not `blocked`) WHERE `username` = 'Whisper'
    Nom : Capture.PNG
Affichages : 105
Taille : 20,8 Ko

    par contre dans ce cas de figure cela ne fonctionne pas.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = (not `blocked`) WHERE username = ?");
    $this->sql->bind_param('s', $username);
    $this->sql->execute();
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.
    Ce n’est pas un bogue - c’est une fonctionnalité non documentée.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 142
    Points : 38 926
    Points
    38 926
    Billets dans le blog
    9
    Par défaut
    une possibilité : utiliser CASE.

    case when `blocked`=1 then 0 else 1 end

  4. #4
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    par contre dans ce cas de figure cela ne fonctionne pas.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->sql = $this->db->prepare("UPDATE `users` SET `blocked` = (not `blocked`) WHERE username = ?");
    $this->sql->bind_param('s', $username);
    $this->sql->execute();
    Assurez-vous d'activer l'affichage des erreurs sur PDO afin de déboguer vos requêtes.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Discussions similaires

  1. inverser l'écran
    Par relax_06 dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/03/2004, 12h20
  2. inverser la lecture d'une requète
    Par nilaco dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/08/2003, 12h16
  3. [VB6] [Graphisme] Inversion dans picturebox
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 16/04/2003, 15h05
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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