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 :

Erreur requête SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut Erreur requête SQL
    Bonjour à tous !

    je suis actuellement en stage de BTS et je dois effectuer pour mon entreprise un site en PHP 5 (Orienté Objet).

    J'ai actuellement une erreur sur une requête SQL :
    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 ';INSERT INTO siege (siege_num, siege_college) VALUES ('','3')' at line 2
    Et voici le code :
    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
    function build_sql_ajout()
      {
    		// Connexion à la base de données
    		$db = new DB($GLOBALS['cnxstr'],$GLOBALS['user'],$GLOBALS['password'],$GLOBALS['dbname']);
     
    		// On cherche le dernier id rentré de la table collège
    		$req="SELECT college_num FROM college ORDER BY college_num DESC LIMIT 1";
    		$req1 = mysql_query($req) or die (mysql_error());
    		$req2 = mysql_fetch_array($req1) or die (mysql_error());
     
    		// On incrémente de 1 la valeur du dernier id de la table collège
    		$num_col = $req2['college_num'] + 1;
     
    		// On créait une chaine de caractère pour la requête d'ajout de siège
    		for ($i=0;$i<=$_POST['nb_place'];$i++)
    		{
    			$values ="('','" . $num_col . "'),";
    		}
    		$values = substr($values,0,-1);
     
    		// Requête principale 
    	    $sql="INSERT INTO college (college_num, college_libelle, college_nb_place, college_commission) 
    			  VALUES ('" . $num_col . "', '" . $_POST['libelle'] . "', '" . $_POST['nb_place'] . "','');";
    		$sql.="INSERT INTO siege (siege_num, siege_college) VALUES $values;";
     
    		// Message d'erreur
    		$erreur = mysql_query($sql) or die ("Erreur INSERT SQL :" .mysql_error());
     
    		// On envoie la requête dans le main.php
    	    $this->sql_ajout=$sql;
      }
    je dois gérer plusieurs requêtes mais je dois les faire passer que dans une seule variable d'où la création d'une chaîne de caractère, est-ce à cause de cela que l'erreur se produit ? Si oui comment y échapper sachant que je suis obligé de tout faire passer via UNE seule variable !?

    La première requête d'INSERT passe bien, le collège est créé mais la requête qui suit elle ne passe pas, les ";" qui se trouve juste avant le message d'erreur me font penser qu'il ne peut exécuter qu'une seule requête à la fois et non plusieurs !

    Merci pour votre aide !

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Salut,

    Ta requete retourne une erreur car il semble que tu es un valeur vide au niveau de siege num, si c'est la clé primaire de ta table elle ne doit pas être NULL.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    je laisse le siege_num='' puisqu'au niveau de la table, l'identifiant est en auto_inc donc ça ne pose pas de problème.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Bah dans ce cas pas besoin de le passer dans ton insert.

    Sinon un autre probleme sur cette requete

    INSERT INTO siege (siege_num, siege_college) VALUES $values;"

    Il faut que tu sorte ta variable values, la c'est comme ci tu voulais inserer texto $values il faut que tu mettes :

    $sql="INSERT INTO siege (siege_num, siege_college) VALUES ".$values;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Ok merci Sebastien, malgré ta modification cela ne fonctionne toujours pas, j'ai bien l'impression qu'il ne veut pas prendre en compte l'existence des reqûetes après la première, il s'arrête au premier ; et se demande pourquoi y'a encore du monde après...

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Je remarque que tu fais une boucle pour remplir ta variables $valeur et que ensuite tu fais un seul insert

    $sql.="INSERT INTO siege (siege_num, siege_college) VALUES ".$values

    Mais tu dois faire autant d'insert qu'il y a de valeur différentes, par exemple :

    Insert into siege (siege_num, siege_college) values (1,2);
    Insert into siege (siege_num,_siege_college) values(2,3);

    Il faudrait que tu intègre ton insert into à ta boucle.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    ça peut fonctionner comme ça, ça permet de faire des requêtes d'insertion sous la forme :

    Insert into siege (siege_num, siege_college) values (1,2), (2,3), (3,4);

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Ok désoler je ne connaisais pas cette méthode. Mais le mieux ce que tu peux deja faire c'est faire un echo de ta requete et voir à quoi elle ressemble.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    l'echo de ma requête donne ce que j'attend, si je l'exécute via phpmyadmin elle fonctionnera, je crois que le soucis vient du code php...

    INSERT INTO college (college_num, college_libelle, college_nb_place, college_commission) VALUES ('2', 'DRAC', '3','');INSERT INTO siege (siege_num, siege_college) VALUES ('','2'),('','2'),('','2')

    Erreur INSERT SQL :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 ';INSERT INTO siege (siege_num, siege_college) VALUES ('','2'),('','2'),('','2')' at line 2

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Nan l'erreur viens bien de ta requete :

    You have an error in your SQL syntax;

    Je pense savoir d'ou sa vient, pour ta variable $value qui est dans ta boucle tu l'increment à chaque fois d'une nouvelle valeur en ajoutant bien une virgule entre chaque :

    for ($i=0;$i<=$_POST['nb_place'];$i++)
    {
    $values ="('','" . $num_col . "'),";
    }

    Mais pour le dernier cette virgule est quand meme placer en fin de requete.
    Je ne connais pas la fonction substr, est ce que c'est à ce moment la que tu enleve la dernière virgule?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    $values = substr($values,0,-1);

    oui la fonction substr permet de retirer la virgule de fin de chaîne

    la seule erreur soit disante erreur SQL provient du ; qu'il y a juste avant la 2ème requête qui permet d'ajouter un siège, il y a juste la première requête d'executée tout ce qui se trouve après ne passe pas...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 10h56
  2. erreur requête SQL
    Par lepeule dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/06/2010, 11h17
  3. [XL-2003] Erreur requête SQL en VBA dans Excel : colonne contenant des chiffres et des lettres
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/08/2009, 13h49
  4. Erreur requête SQL en VBA dans Excel
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2009, 15h06
  5. erreur requète SQL : trop peu de paramètres
    Par pierre.egaud dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/04/2006, 14h57

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