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

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    octobre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2010
    Messages : 144
    Points : 103
    Points
    103

    Par défaut Insertion/update de boolean

    Bonjour,
    J'utilise PHP 7.2 et PostGreSQL 10.1. J'ai déjà lu qu'il y a quelques galères de gestion des booleans avec postGre.
    J'en ai un que je n'arrive pas à résoudre : il n'y a pas de problème a insérer/updater une colonne avec une valeur true mais ça plante si j'ai false.

    Un exemple simple : passer un user de l'état d'admin à non admin :
    La requête est paramétrée avec le SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update user set admin=$1 where "userId" = $2
    et le tableau de valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { [0]=> bool(false) [1]=> string(1) "9" }
    Ca me fait cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning:  pg_query_params(): Query failed: ERREUR:  syntaxe en entrée invalide pour le type boolean : «  » in ...
    J'ai tenté de le faire en passant mes paramètres par pg_convert() avant.
    Le tableau de paramètres qui me revient est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { [0]=> string(3) "'f'" [1]=> string(1) "9" }
    Et l'erreur qui est générée est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning:  pg_query_params(): Query failed: ERREUR:  syntaxe en entrée invalide pour le type boolean : « 'f' » in ...
    Donc soit je laisse pg_query_params() gérer lui-même la sécurisation des données (est-ce suffisant ?) et il me transforme un false en ' ' (double espace). Soit je sécurise les données par le mécanisme proposé pg_convert() et là le false se transforme en 'f' (avec simple quote) qui visiblement n'est pas le f attendu.

    Je précise que si la valeur du booléen est true il n'y a pas de soucis.
    Une petite idée pour me tirer de là ?

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

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

    Informations forums :
    Inscription : avril 2007
    Messages : 8 321
    Points : 15 762
    Points
    15 762

    Par défaut

    Juste pour être sûre : la colonne en base est bien un type Boolean ?
    Une vieille note de la doc semble dire que les booléens sont moyennement bien supportés par pg_query_params (http://php.net/manual/fr/function.pg...ams.php#115063) Essaye peut-être de convertir manuellement tes booléens.

    EDIT : en fouillant dans la doc PHP, j'ai trouvé ceci :
    Une valeur booléenne TRUE est convertie en la chaîne "1". Une valeur booléenne FALSE est convertie en "" (une chaîne vide). Ceci permet les conversions vers et depuis une chaîne et un booléen.
    http://php.net/manual/fr/language.ty...string.casting

    Donc il semblerait que ton booléen soit automatiquement converti en chaine à l'entrée de pg_query_params. True fonctionne parce que "1" est une valeur valide pour un booléen, mais false devient une chaine vide, ce qui n'est pas supporté.
    Tu peux tricher en castant ton booléen en entier, car true deviendra 1 et false deviendra false. Mais c'est tordu comme truc

    (Sinon, il y a PDO )
    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
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    octobre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : octobre 2010
    Messages : 144
    Points : 103
    Points
    103

    Par défaut

    exact.
    J'ai tourné autour du pot... et pas de pot ! Plutôt que de se galérer à gérer des transformations de string en boolean dans un sens puis dans l'autre, autant se galérer un petit peu pour passer à PDO !
    Les trucs tordus ce ne sont jamais des solutions viables pour des applications sérieuses
    merci de m'avoir relancé sur PDO, je suis le conseil...

Discussions similaires

  1. INSERT/UPDATE via DBLink
    Par Wilk dans le forum Oracle
    Réponses: 1
    Dernier message: 15/03/2006, 14h51
  2. [C#][2.0] Traitement de Formulaire (Insert / Update)
    Par softflower dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/02/2006, 13h44
  3. Réponses: 4
    Dernier message: 05/04/2005, 18h28
  4. Redirect de la page après un insert/update/delete
    Par mchicoix dans le forum XMLRAD
    Réponses: 5
    Dernier message: 25/02/2005, 09h31
  5. [Info] Insert/Update si problèmes divers
    Par portu dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 10h17

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