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 :

A propos de l'erreur SQLSTATE[HY093]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut A propos de l'erreur SQLSTATE[HY093]
    Bonjour,
    Lorsque un formulaire contient des checkbox non cochées, ceux-ci provoquent une erreur SQLSTATE[HY093].
    Actuellement, je fais comme ceci (lignes 3 et 4):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $data	= array_diff_key($post, ['form'=>'', 'save'=>'', ]);
    $data	= array_map('filterValues', $data);	// TRANSFORME LES CHAINES VIDES EN NULL OU ''
    $data['pending'] = $data['pending'] ?? null;
    $data['locked'] = $data['locked'] ?? null;
    $ctl	= updateSubscriber($data);	// Fonction dans 'model/model.php' en MVC
    Lorsqu'il y a beaucoup de checkbox, c'est fastidieux. Je cherche une solution plus élégante. Avez-vous une meilleure idée?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 497
    Par défaut
    Bonjour,

    Vous utilisez une requête préparée à l'intérieur de la fonction updateSubscriber ?

    Parce que l'erreur SQLSTATE[HY093] Invalid parameter number est généralement liée à l'absence d'un ou plusieurs marqueur(s).

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Oui, c'est bien ça. Justement lorsqu'il y des checkbox non cochées, il manque des paires clef/valeur et je cherche un moyen de les initialiser à 0 ou null d'un coup sans répéter autant de fois $data['myKey'] = $data['myKey'] ?? null; que j'ai de checkbox.

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Tu peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $keys = ['pending', 'locked', 'toto', 'titi'];
     
    $data = ['toto' => 'foo'];
     
    $data += array_fill_keys($keys, null);
     
    var_export($data);
    démo

    Reste à savoir si le jeu en vaut la chandelle.



    Au passage, $data['locked'] = $data['locked'] ?? null; peut se contracter en $data['locked'] ??= null;

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    $data += array_fill_keys($keys, null);
    Je ne comprends pas bien le += dans le cas d'un tableau:
    • Que se passe t-il si certaines valeurs sont différentes pour une même clef?
    • Est-ce équivalent à merge()?

    Citation Envoyé par CosmoKnacki Voir le message
    Reste à savoir si le jeu en vaut la chandelle.
    Effectivement, je n'en suis pas si sûr, surtout avec l'écriture contractée que tu m'indiques.

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 988
    Par défaut
    Citation Envoyé par moimp Voir le message
    Je ne comprends pas bien le += dans le cas d'un tableau:
    • Que se passe t-il si certaines valeurs sont différentes pour une même clef?
    • Est-ce équivalent à merge()?
    Le + est l'opérateur d'union pour les tableaux, si certaines valeurs sont différentes pour une même clef, c'est le tableau de gauche qui gagne.
    Ce n'est pas équivalent à array_merge où c'est le tableau de droite qui prend le dessus pour une même clef associative.
    Les différences sont subtiles entre l'opérateur d'union et array_merge et les règles ne sont pas les mêmes lorsque les clefs sont numériques. Il faut donc lire attentivement le manuel et ses exemples pour être au clair.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/12/2022, 17h56
  2. [MySQL-5.7] Erreur SQLSTATE [HY093]
    Par jean-simon dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/10/2021, 10h52
  3. [PDO] Erreur 'SQLSTATE[HY093]' lors d'opérations sur $bdd
    Par captainchristian dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/04/2018, 09h49
  4. Erreur : SQLSTATE[HY093]: Invalid parameter number
    Par antoinv10 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/06/2015, 15h39
  5. Réponses: 2
    Dernier message: 30/05/2015, 19h47

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