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 :

[PDO] [FIREBIRD]EXECUTE BLOCK et utilisation des paramètres


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Par défaut [PDO] [FIREBIRD]EXECUTE BLOCK et utilisation des paramètres
    Bonjour,
    Ce bout de code consiste à insérer 20 lignes dans une table client (NUM : integer auto incremente, Nom: varchar(20)) avec des noms different C1,C2,C3......C20
    je n'arrive pas à exécuter un excecute block dans un fichier PHP alors que la même requête s’exécute très bien ailleurs ,

    le problème réside dans le parametre :N , puisque j'ai essayé de le replacer avec une valeur 'ESSAI' par exemple , il insert bien 20 lignes avec comme nom ESSAI

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <?php
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); 
     
     
    $success = false;
    $data = array();
    $host='c:/clients.fdb';
    $user='SYSDBA';
    $pas='masterkey';
     
     
     
     $dbh = new PDO("firebird:dbname=$host;charset=UTF-8",$user,$pas);
     $sql1 = " 
    
             execute block as
               declare variable I INTEGER;
               declare variable N varchar(20);
            begin 
             I=0;
             N=I;
            while (I <20)
              DO begin
                      I=I+1;
                      N=I;
                      insert into client (NOM) VALUES ('C'||:N);
                 end
    
     END";
     
     
     $req1  =  $dbh->prepare($sql1);
    if($req1){
             $confirm = $req1 -> execute();
     
              if($confirm){
                    $array['success'] = true;
                    $array['msg'] = "Les clients  ont bien été ajouté "; 
              }else{
                   $array['success'] = false;
                   $array['msg'] = "Une erreur d'ajout s'est produite !  ";
              }
       }else{
           $array['success'] = false;
           $array['msg'] = "Impossible d'ajouter ces clients !! ";   
       }
      echo json_encode($array);
     
     $sql2 = "SELECT nom FROM client";
     
    $req2 = $dbh->query($sql2);
     if($req2){
         $resultats2 = $req2->fetchAll(PDO::FETCH_ASSOC);//obligatoires pour $count
         $array['success'] = true;
          $array['msg'] = "VOICI LA LISTE "; 
         $array['return'] = $resultats2;
     
     }else{
          $array['success'] = false;
          $array['msg'] = "Erreur (1) de requete SQL  ! ";
     }
     
     
     
    echo json_encode($array);

    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 341
    Billets dans le blog
    17
    Par défaut
    Si tu prépares la requête PDO va attendre une valeur pour :N
    Exécute ta requête $sql1 directement avec $dbh->query()

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Exécute ta requête $sql1 directement avec $dbh->query()
    Merci pour votre réponse, j'ai essayé avec $dbh->query() mais il n'y a toujours pas d'insertion , et le problème est au niveau du paramètre puisque lorsque je le remplace par une valeur fixe
    ( exemple ('C0001')) l'insertion se fait très bien

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 341
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 341
    Billets dans le blog
    17
    Par défaut
    le problème est au niveau du paramètre puisque lorsque je le remplace par une valeur fixe
    ( exemple ('C0001')) l'insertion se fait très bien
    Le paramètre est géré par Firebird, je ne sais pas comment fonctionne Firebird (avec MySQL les variables sont préfixées @, et les placeholders utilisés uniquement sur des requêtes préparées et positionnés avec "?" et pas ":placeholder").
    Tu vérifies si la requête retourne une erreur ? Regarde PDO::errorInfo() https://www.php.net/pdo.errorinfo
    Sinon tu peux aussi préparer la requête pour 1 insertion et faire une boucle PHP.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Par défaut
    Merci Séb pour votre réponse rapide
    Citation Envoyé par Séb. Voir le message
    Tu vérifies si la requête retourne une erreur ? Regarde PDO::errorInfo() https://www.php.net/pdo.errorinfo
    Voici Le code d'erreur généré Dynamic SQL Error SQL error code = -901 undefined message number

    Citation Envoyé par Séb. Voir le message
    Sinon tu peux aussi préparer la requête pour 1 insertion et faire une boucle PHP
    Je vais essayer de faire ainsi .

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Par défaut
    Bonjour,
    finalement j'ai contourné le problème en ajoutant une procédure stockée et en remplaçant "execute block ...." par "execute procedure maprocedure;"

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

Discussions similaires

  1. procedure EXECUTE BLOCK et firebird 2
    Par jupierre dans le forum Outils
    Réponses: 2
    Dernier message: 29/11/2006, 11h34
  2. application php+mysql de gestion executable
    Par kephrem dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 03/02/2006, 09h55
  3. Réponses: 2
    Dernier message: 14/01/2006, 09h12
  4. Réponses: 9
    Dernier message: 29/10/2005, 20h11
  5. Réponses: 6
    Dernier message: 23/05/2005, 08h33

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