Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    avril 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : avril 2009
    Messages : 5
    Points : 0
    Points
    0

    Par défaut PDO Insertion multiple

    Bonjour j'ai un code PDO qui me reteourne l'erreur suivante

    Coonection failed: SQLSTATE[42000]: Syntax error or access violation:1064 You have an error in SQL syntax
    Le message d'erreur n'est pas complet parce que je le reçois sur un téléphone portable.

    Voici le code . Si quelqu'un à une idée


    Code :
    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
    <?php 
    define("DBHOST","localhost",TRUE);
    define("DBUSERNAME","root",TRUE);
    define("DBPASSWORD","***",TRUE);
    define("DBNAME","tuto",TRUE);
     
    //Récupération des données du sms
    $time = $_GET['time'];                        // Date et heure d'envoi
    $sender = $_GET['sender'];                   // Numéro de téléphone du Sender
    $tab = $_GET['text'];  
     
    // Etape 1 : séparation du préfixe et du reste
    sscanf($tab, '%s %s', $prefix, $codes); 
    // Etape 2 : développement de $codes en array
    // Astuce : On remplace tous les [espace]T par ¤[prefixe] T.
    // Puis on explode sur ¤.
    $tab_array = explode('¤', $prefix . str_replace(' n', "$sender $time $prefix n", $codes));
    // On change chaque code ACT T8 25 en "(ACT T8 25)"
    $callback = function($id,$dat,$lib,$type,$nb) {
       return "($id,$dat,$lib,$type,$nb)";
    };
    $tab_array = array_map($callback, $tab_array);
    // On peut maintenant l'imploder dans la requête SQL
     
    $query = "INSERT INTO table(id,dat,lib,types,nb) VALUES \n" . implode("\n", $tab_array) .';';
     
    $con = 'mysql:dbname='.DBNAME.';host='.DBHOST;
    try {
        $cmd = new PDO($con,DBUSERNAME,DBPASSWORD,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        $affected = $cmd->exec($query);
     
        if($affected){ // $affected > 0
            echo "enregistrement reussi";
        } else {
            $myeCode = $stmt->errorCode();
            echo $myeCode;
        }
    }
    catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    ?>

  2. #2
    Membre actif
    Homme Profil pro Said ELMOUADIN
    Développeur Web
    Inscrit en
    mai 2012
    Messages
    86
    Détails du profil
    Informations personnelles :
    Nom : Homme Said ELMOUADIN
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2012
    Messages : 86
    Points : 151
    Points
    151

    Par défaut

    bonjour,

    je pense que y a des virgules qui manquent dans ta requete
    exp:
    Code :
    insert into table values (bloc1), (bloc2), (blocn);

  3. #3
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 363
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 66
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 363
    Points : 2 577
    Points
    2 577
    Billets dans le blog
    1

    Par défaut

    Bonjour,
    Comme le dit l'erreur, tu as une erreur de syntaxe dés la connection, du reste c'est quoi ces "\n"

    Tu doit en premier te connecter corectement avec gestion des erreurs
    Code :
    1
    2
    3
     
    $bdd = new PDO('mysql:host=localhost;dbname=tuto', 'root', '****');
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Ensuite tu fait un prepare d'INSERTION

    Code :
    1
    2
    3
     
    $req = $bdd->prepare("INSERT INTO table(id,dat,lib,types,nb)  VALUES (:lid,:dat,:lib,:types,:nb)");  
    $req->execute(array( ':lid' => $uneid,  ':dat' => $dat,  ':lib' => $lib,  ':type' => $type,  ':nb' => $nb ));
    Ensuite autant d'execute que tu veux sur le même prepare!!!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •