+ 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 : 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
    <?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 confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2012
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2012
    Messages : 119
    Points : 218
    Points
    218

    Par défaut

    bonjour,

    je pense que y a des virgules qui manquent dans ta requete
    exp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table values (bloc1), (bloc2), (blocn);

  3. #3
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 388
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Â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 388
    Points : 2 614
    Points
    2 614
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
  •