Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme syntaxe Requete Préparée

    27 avril 2017 à 16:24:15

    Hola muchachos !

    Je requiers un soupçon d'assistante :) J'essaie de me mettre un peu aux requêtes préparées, et pour se faire, je lis un peu ce qu'on trouve ca et là sur les forum.

    Pour répondre à mon besoin, j'ai donc essayé de faire une requête INSERT INTO et j'en suis arrivé à ce bout de code... qui ne fonctionne pas mais dans lequel je vois pas où se situe l'erreur. Ma bdd n'est pas modifiée, mon try ne me renvoie aucun message d'erreur, et si je tape en dur ma requête avec les valeurs dans PHPMyadmin, cela fonctionne ! :(

    $sql = "INSERT INTO ma table (col1, col2, col3) VALUES (:var1, :var2, :var3);
    
    $data = array (':var1'=> $mavariable1, ':var2' => $mavariable2, ':var3' => $mavariable3);
    
    try {
         $requete = $bdd -> prepare($sql);
         $requete -> execute ($data);
    
    } catch (exception $e) {
         echo "tu comprends rien t'es nul !";
    }



    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2017 à 16:27:07

      Parce que tu n'as pas demandé à PDO de lever une exception en cas d'erreur ?

      C'est le vrai code ? (vu l'espace dans le nom de la table et la " manquante pour terminer la requête, j'imagine que non)

      -
      Edité par julp 27 avril 2017 à 16:28:35

      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2017 à 17:06:13

        non c'est pas le vrai code, parce que mon pc de travail n'étant pas relié au net (enfin si, mais derrière un proxy assez bridé ou j'ai pas accès à Openclassrooms), j'ai retapé les lignes en simplifiant le nom des variables et des champs qui étaient plus longs, d'ou l'oublie du ".  Je vais mettre ici le vrai code que j'ai testé :

        <?php
        // connexion bdd
        include 'connexion-bdd.php';
        
        // récupération champs formulaire
        $date_jour = $_POST['form-date'];
        $nom_personnel = $_POST['form-nom'];
        $commentaire = $_POST['form-commentaire'];
        
        // construction requete sql
        $sql = "INSERT INTO reservation_voiture (res_date, res_nom, res_com) VALUES (:var1, :var2, :var3)";
        
        // variables requete sql 
        $data = array (':var1'=> $date_jour, ':var2' => $nom_personnel, ':var3' => $commentaire);
         
        try {
             $requete = $bdd -> prepare($sql);
             $requete -> execute ($data);
         
        } catch (Exception $e) {
             die('Erreur : ' . $e->getMessage());
        }
        ?>
        



        -
        Edité par Cubitus75 27 avril 2017 à 17:09:16

        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2017 à 17:10:15

          Commences par activer correctement les erreurs. Si l'INSERT n'a pas lieu et plante sans que tu ne "rentres" dans le catch pour autant, c'est que tu n'as pas demandé à PDO de lever des exceptions en cas d'erreur de requête.

          Ca peut être dû à beaucoup de choses : erreur de bdd, table, colonne, une variable nulle (surtout qu'il n'y a aucun test dessus, ne serait-ce que d'existence, visiblement) pour une colonne non nullable, une contrainte d'intégrité non respectée, etc.

          -
          Edité par julp 27 avril 2017 à 17:42:45

          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2017 à 17:19:48

            si je comprends ce que tu me dis, j'ai rajouté ca : 

            $bdd->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

            et effectivment j'ai un message d'erreur qui apparait, ca me dit data too long for column.

            bon visiblement c'est là que ca merde :) je vais regarder ca de plus pres ^^ merci

            • Partager sur Facebook
            • Partager sur Twitter

            Probleme syntaxe Requete Préparée

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown