Partage
  • Partager sur Facebook
  • Partager sur Twitter

MySQL Erreur

Syntax error or access violation: 1064 You have an error in your SQL

Sujet résolu
    21 janvier 2018 à 19:52:32

    Bonjour le forum, 

    Je demande à la communauté de m'aidez car j'ai beau chercher sur google je ne trouve pas la solution, j'ai essayer les ` et ' et " je me retrouve encore avec l'erreur ci dessous :  

    Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? AND prix <= 20' at line 1 in /chemin/:328 Stack trace: #0 /chemin/(328): PDO->query('SELECT * FROM j...') #1 {main} thrown in /chemin/ on line 328


    Voici mon code source ( je vous remercie par avance et n'oubliez pas, soyez cool d'autres gens sont dans la même situation que moi merci) : 

    // Connexion.

    try{
    $bdd = new PDO('mysql:host=localhost;dbname=jeux_video;charset=utf8', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }
    catch (Execption $e) {
    die('Error connexion' . $e->getMessage() );
    }

    $requete = $bdd->query("SELECT*FROM jeux_video WHERE possesseur = ? AND prix <=20");
    $requete_exe = $requete->execute(array($_GET['possesseur_usr'],$_GET['prix']));
    while($donnee_req = $requete_exe->fetch() ) {
    echo '<p>' . $donnee_req['possesseur'] . '</p>';
    echo '<p>' . $donnee_req['prix'] . '</p>';
    }
    • Partager sur Facebook
    • Partager sur Twitter

    <On en apprendra toujours, même du plus con sur terre, by Code Solo>

      21 janvier 2018 à 19:54:29

      Salut,

      on prépare avec prepare pas avec query.

      Et tu as 1 ? pour 2 éléments dans ton tableau execute

      -
      Edité par WillyKouassi 21 janvier 2018 à 19:55:21

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        21 janvier 2018 à 19:56:34

        Remplacer query par prepare : exécuter directement une requête préparée, ça ne va pas marcher des masses.

        > while($donnee_req = $requete_exe-&gt;fetch() ) {

        Appeler fetch sur un booléen, ça ne va pas fonctionner : remplacer $requete_exe par $requete

        Il serait bon de reprendre le cours et doc.

        -
        Edité par julp 21 janvier 2018 à 19:59:55

        • Partager sur Facebook
        • Partager sur Twitter
          21 janvier 2018 à 20:15:27

          Voici les correctifs : 

          // Connexion.
          try{
          $bdd = new PDO('mysql:host=localhost;dbname=jeux_video;charset=utf8', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
          }
          catch (Execption $e) {
          die('Error connexion' . $e->getMessage() );
          }

          $requete = $bdd->prepare("SELECT*FROM jeux_video WHERE possesseur = ? AND prix <=20");
          $execution = $requete->execute(array($_GET['possesseur_usr'],$_GET['prix']));
          while($donne = $execution->fetch() ) {
          echo '<p>' . $donne['possesseur'] . '</p>';
          echo '<p>' . $donne['prix'] . '</p>';
          }
          }


          L'erreur : 

          Notice: Undefined index: prix in /chemin on line 329

          Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /chemin:329 Stack trace: #0 /chemin329): PDOStatement->execute(Array) #1 {main} thrown in /chemin on line 329


          WillyKouassi a écrit:

          Salut,

          on prépare avec prepare pas avec query.

          Et tu as 1 ? pour 2 éléments dans ton tableau execute

          -
          Edité par WillyKouassi il y a 11 minutes


          Effectivement j'ai oublier de changer sa, je le sais mais j'ai quand même fais la bêtise en copiant le code. Merci pour la rapidité ! je suis stupéfait.

          Merci sinon conçernant le cours je te promet l'avoir décortiquer, j'ai tout dossier de test pour chaque cour que je tiens a mettre en ligne c'est une repro du cour mais avec des tests et des exemples. 

          • Partager sur Facebook
          • Partager sur Twitter

          <On en apprendra toujours, même du plus con sur terre, by Code Solo>

            21 janvier 2018 à 20:43:22

            Pas vraiment corrigé puisque tu n'as pas pris ce qu'a dit Julp en compte, enlève $execution = et remplace $execution par $requete dans le while. Pour la notice il faut tester tes $_GET avec isset ou empty et pour l'erreur fatale regarde ma dernière phrase donc remplace 20 par ?

            > Merci sinon conçernant le cours je te promet l'avoir décortiquer

            Tu as loupé des choses apparemment.

            • Partager sur Facebook
            • Partager sur Twitter
            le bienfait n'est jamais perdu
              21 janvier 2018 à 22:46:26

              Je ne comprend pas '-&gt;' pourquoi tu l'ajoute ?

              while($donnee_req = $requete_exe-&gt;fetch() ) {

              _________

              > Merci sinon conçernant le cours je te promet l'avoir décortiquer

              Tu as loupé des choses apparemment. 

              [je suis pas du genre menteur mais si je suis la à vous demander c'est bien parceque je décortique mais je n'y arrive pas]

              __________

              En ayant relis le cours : je met connect à la base de donnée qui est $bdd un objet,

              que je remet dans un autre objet $reponse puis j'exécute la $reponse qui lui contient

              un tableau associatif ou je précise les variables nominatifs que j'enregistre dans $requete.

              Ensuite je parcours les données ($donnee) de $requete avec la fonction fetch() et demande

              d'afficher les entrées souhaitées par le biais de la boucle.

              Le  message d'erreur : 

              Notice: Undefined index: prix in /chemin on line 329

              Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in /chemin:329 Stack trace: #0 /chemin(329): PDOStatement->execute(Array) #1 {main} thrown in /chemin on line 329

              Corriger (si ce ce n'ai pas le cas, alors je ne comprend pas et vous demande s'il vous plait de me donner un exemple clair en reprenant la strucutre du code)  : MERCI PAR AVANCE 

              // Connexion.
              try{
              $bdd = new PDO('mysql:host=localhost;dbname=jeux_video;charset=utf8', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
              }
              catch (Execption $e) {
              die('Error connexion' . $e->getMessage() );
              }

              $reponse = $bdd->prepare("SELECT*FROM jeux_video WHERE possesseur = ? AND prix <=20");
              $requete = $reponse->execute(array($_GET['possesseur_usr'],$_GET['prix']));
              while($donnee = $requete->fetch() ) {
              echo '<p>' . $donnee['possesseur'] . '</p>';
              echo '<p>' . $donnee['prix'] . '</p>';
              }
              • Partager sur Facebook
              • Partager sur Twitter

              <On en apprendra toujours, même du plus con sur terre, by Code Solo>

                21 janvier 2018 à 23:24:03

                Utilise le </> pour ton code.

                Je ne t'ai pas traité de menteur mais dire que tu décortiques et faire autant d'erreurs c'est inquiétant.

                Pas besoin d'assigner le retour de execute dans une variable. Donc utilise simplement $reponse->execute(...);

                pas de $requete = $reponse->execute(...);, et dans le while utilise $reponse au lieu de requête.. On se perd quand même avec tes changements de nom de variables.

                Execption non, Exception oui.

                Pour l'erreur "Invalid ..." dans la méthode execute tu as 2 $_GET alors que dans ta requête tu as 1 ?

                -
                Edité par WillyKouassi 21 janvier 2018 à 23:24:32

                • Partager sur Facebook
                • Partager sur Twitter
                le bienfait n'est jamais perdu
                  28 janvier 2018 à 0:12:03

                  WillyKouassi a écrit:

                  Je ne t'ai pas traité de menteur mais dire que tu décortiques et faire autant d'erreurs c'est inquiétant.

                  ________________________________________________________________________________

                  Est ce que j'ai dis que tu m'a traité de menteur ? seulement je t'informe puisque tu insinue pas mal de chose à mon encontre, je ne vais pas m'attarder dessus, dis ce que tu souhaite mais j'ai tout de même l'envie de te dire une chose avant de ne pas revenir sur ce sujet que tu viens de casser. sache que Open Classroom n'a pas besoin de gens comme toi qui se permette de juger ou de transmettre des messages de merde comme comme quoi je n'ai pas assez décortiquer la chose et que cela est inquiétant, j'aimerai bien te revoir le jour de ton apprentissage et pas que, aujourd'hui même je t'apprend une chose que peu être tu n'a pas encore compris.

                  Bref je te remercie mais je ferai sans ton aide pour plusieurs raisons que je ne citerai pas sauf une la voici, excuse moi pour la petite crotte de nez: 

                  j'ai écris si tu sais lire : Corriger (si ce n'ai pas le cas, alors je ne comprend pas et vous demande s'il vous plait de me donner un exemple clair en reprenant la structure du code) 

                  Pour le coup c'est vrai tes inquiétant tu n'as rien fais de ce que je demande car tu n'as pas compris.
                  Où est la structure du code ? tu peux reprendre à zéro, je ne vois vraiment pas où est ton problème… .

                  PS: Prend exemple sur moi quand on veux aidez : https://openclassrooms.com/forum/sujet/install-w7-impossible-creer-partition-systeme

                  Je met le sujet en résolus.

                  -
                  Edité par Code Solo 28 janvier 2018 à 0:21:37

                  • Partager sur Facebook
                  • Partager sur Twitter

                  <On en apprendra toujours, même du plus con sur terre, by Code Solo>

                    28 janvier 2018 à 0:14:35

                    Bonne continuation.

                    Tu dis suivre un tuto et tu fais tout le contraire de ce qu'il dit. Julp a fait une première correction et dans ton message suivant tu as fait la même erreur. Tu vois il est bien gentil , il t'a dit "Il serait bon de reprendre le cours et doc" .Et tu penses que c'est du mal qu'on te fait en te disant ça ?

                    Quelqu'un va pas me dire j'ai lu la documentation PHP et je suis sûr que c'est eco pas echo et je vais lui dire ha tu as raison.

                    Dans mon avant dernier message j'ai apporté des pistes de corrections, mais bon apparemment tu en avais déjà marre de celui que tu verras bien se faire bannir d'ici.

                    -
                    Edité par WillyKouassi 28 janvier 2018 à 0:23:25

                    • Partager sur Facebook
                    • Partager sur Twitter
                    le bienfait n'est jamais perdu

                    MySQL Erreur

                    × 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