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 :

bindParam simplification d'écriture ? [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Par défaut bindParam simplification d'écriture ?
    Bonjour à tous,

    Je m'adresse à vous afin de me renseigner sur les possibilités de simplifier l'écriture de bindParam.

    Lorsque l'on lie un paramètre il faut qu'il ai été déclaré avant car sinon PHP me génère une erreur (en strict je ne sais pas si elle est levée autrement).
    J'ai bien essayé d'initialiser le paramètre directement dans bindParam mais celà génère également une erreur.

    Cela n'est pas trop gênant dans la cadre d'un ou deux paramètres pour la requête ( par exemple le paramètre d'un foreach que l'on déclare avant) mais devient vite brouillon quand on en utilise beaucoup plus.

    Faut-il donc de préférence remplacer bindParam par bindValue à l'intérieur de la boucle dans ce cas, ou bien y a t il une solution moins touffue pour écrire la requête ?

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    $db = new db_user2();
     
    $sql = "SELECT pcr_results(     :id_request,:id_group,:id_task,
                                    :id_patient,:pcr_date,:failure,
                                    :gag,:pol,:env,:hubg,
                                    :type_sample)";
     
    $id_request=0;   $id_group=0;  $id_task=0;   $id_patient=0;
    $pcr_date='';   $gag='';   $pol='';  $env='';  $hubg='';  $type_sample=0;
     
    $db->beginTransaction();
     
    $result = $db->prepare($sql);
     
    $result->bindParam('id_request',$id_request,PDO::PARAM_INT);
    $result->bindParam('id_group',$id_group,PDO::PARAM_INT);
    $result->bindParam('id_task',$id_task,PDO::PARAM_INT);
    $result->bindParam('id_patient',$id_patient,PDO::PARAM_INT);
    $result->bindParam('pcr_date',$pcr_date,PDO::PARAM_STR);
    $result->bindParam('gag',$gag,PDO::PARAM_STR);
    $result->bindParam('pol',$pol,PDO::PARAM_STR);
    $result->bindParam('env',$env,PDO::PARAM_STR);
    $result->bindParam('hubg',$hubg,PDO::PARAM_);
    $result->bindParam('type_sample',$type_sample,PDO::PARAM_INT);
     
    foreach($_POST as $key => $value){
            if(!preg_match('/^([0-9]+)\-([0-9]+)\-([0-9]+)\-([0-9]+)#([a-z_]+)$/',$key,$matches)) trigger_error("Please contact the admin[h]",E_USER_ERROR);
     
                    if($matches[5]==='failure'){ // nasty trick to take every entry only once
                            $prefix = $matches[1]."-".$matches[2]."-".$matches[3]."-".$matches[4];
     
                            if( empty($_POST[$prefix."#failure"])) $result->bindValue('failure',$_POST[$prefix."#failure"],PDO::PARAM_NULL);
                            else $result->bindValue('failure',$_POST[$prefix."#failure"],PDO::PARAM_INT);
     
                            $id_request = $matches[1];
                            $id_group = $matches[2];
                            $id_task =  $matches[3];
                            $id_patient = $matches[4];
                            $pcr_date = $_POST[$prefix."#date"];
                            $gag = $_POST[$prefix."#gag"];
                            $pol = $_POST[$prefix."#pol"];
                            $env = $_POST[$prefix."#env"];
                            $hubg = $_POST[$prefix."#hubg"];
                            $type_sample = $_POST[$prefix."#type_sample"];
     
                            $result->execute();
                    } else continue;
     
    }
    if($db->commit()) echo "<meta http-equiv='refresh[..]
    Maintenant il est également possible que je passse complètement à côté de l'utilisation de bindParam ...

    Merci d'avance pour vos suggestions.


    Edit : Je précise tout de même qu'il est impossible d'initialiser bind param avec la variable d'un tableau exemple : bindParam('nom',table['index']) d'où la nécéssité de nommer chaque variable. (ou alors pareil je passe à côté de quelquechose...)

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je ne comprends rien a ton code,en effet pourquoi tout ces bindParam dans un select .
    Le select lit toutes les lignes trouvées directement par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $machin=$requte['nom du champ']

  3. #3
    Membre très actif

    Avatar de nicosmash
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 395
    Par défaut
    Bonsoir,

    On peut tout mettre dans un tableau mais je préfère comme ceci car sinon niveau débogage c'est plus compliqué

    Pour ce qui est du bindParam et bindValue c'est différent :
    - bindParam
    - bindValue

    -------------------------------

    Lorsque l'on lie un paramètre il faut qu'il ai été déclaré avant car sinon PHP me génère une erreur (en strict je ne sais pas si elle est levée autrement).
    J'ai bien essayé d'initialiser le paramètre directement dans bindParam mais celà génère également une erreur.
    Tout simplement en vérifiant si la variable existe (un simple if) puis le paramètre s'il existe, sinon une variable par défaut.

  4. #4
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Par défaut
    @christele_r : "SELECT pcr_results " pcr_results est une fonction, d'où les paramètres derrière.


    @nicosmash : Donc en gros pas moyen de simplifier (le tableau ne me botte pas non plus du aux difficultés de déboguage)...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pandora Voir le message
    @christele_r : "SELECT pcr_results " pcr_results est une fonction, d'où les paramètres derrière.
    Bonjour,
    Oui alors avec ce que tu avais posté, impossible de vraiment te répondre
    Contrairement à ce que tu vient de poster, si nous avions d'avantage de code je suis presque certaine que les binParam ne sont pas utils... postes voir ton code

  6. #6
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Par défaut
    Je veux bien rajouter du code, mais tout est là, et je ne vois pas trop quoi ajouter pour que ce soit plus clair?

    Les seules choses qui ne sont pas écrites sont les vérifications des variables POST.

    C'est un script suite à un formulaire qui enregistre des résultats dans la base de données (postgres).


    L'entête de la fonction :
    -- Function: pcr_results(integer, integer, integer, integer, date, integer, character, character, character, character, integer)

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

Discussions similaires

  1. [XL-2010] Simplification d'écriture du code
    Par canary dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/01/2013, 15h56
  2. Héritage et simplification d'écriture
    Par franco01 dans le forum C++
    Réponses: 7
    Dernier message: 17/02/2006, 10h48
  3. [DOM] création et écriture
    Par phoebe dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 22/03/2004, 15h13
  4. [debugger] détection écriture mémoire
    Par tut dans le forum MFC
    Réponses: 3
    Dernier message: 07/01/2004, 10h17
  5. [Kylix] Simplifications de l'écriture Kylix/Pascal"
    Par Mr Vincent KLEIN dans le forum EDI
    Réponses: 1
    Dernier message: 11/03/2003, 11h07

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