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 :

requête d'insertion et SQLSTATE[42000] [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut requête d'insertion et SQLSTATE[42000]
    Salam ; j'i une requête d'insertion qui me génere le message d'erreur suivant:
    Erreur de requête : 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 'DEC VALUES('','123','253','2011-02-21','5','3','00','6','23','02','01','5','3','' at line 1031
    code d'insertion
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    // inclusion de fichier de connexion
     
    $datefr=$_POST['datedec'];
    		$split = explode("/",$datefr); 
    		$annee = $split[2]; 
    		$mois = $split[1]; 
    		$jour = $split[0]; 
    		$datefr= "$annee"."-"."$mois"."-"."$jour"; 
    		echo $datefr; // pour verifier le résultat
     
    	$cdet='123';
    	$cdc='253';
     
     
    $insertdata = $cbd->prepare("INSERT INTO DEC VALUES('',:cdet,:cdc,:datedec,:m,:f,:m1,:f1,:m2,:f2,:m3,:f3,:m4,:f4,:m5,:f5,:m6,:f6,:m7,:f7,:m8,:f8)");
    	try
    	{
    	$insertdata->bindParam(':cdet',			$cdet, 		 			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':cdc',			$cdc,  		  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':datedec',  	$datefr,  					PDO::PARAM_STR); // date 
    	$insertdata->bindParam(':m',  		$_POST['m'],  	  			PDO::PARAM_INT); // entier
    	var_dump($_POST['m']); // pour vérifier le contenu affiche (string '5' (length=1)) exacte
    	$insertdata->bindParam(':f',  		$_POST['f'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m1',  		$_POST['m1'],  	  			PDO::PARAM_INT); // entier
     
    	$insertdata->bindParam(':f1',  		$_POST['f1'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m2',  		$_POST['m2'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f2',  		$_POST['f2'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m3',  		$_POST['m3'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f3',  		$_POST['f3'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m4',  		$_POST['m4'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f4',  		$_POST['f4'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m5',  		$_POST['m5'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f5',  		$_POST['f5'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m6',  		$_POST['m6'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f6',  		$_POST['f6'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m7',  		$_POST['m7'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f7',  		$_POST['f7'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':m8',  		$_POST['m8'],  	  			PDO::PARAM_INT); // entier
    	$insertdata->bindParam(':f8',  		$_POST['f8'],  	  			PDO::PARAM_INT); // entier
     
    	$insertdata->execute();
    	}
    	catch ( Exception $e )
    	{
    	echo 'Erreur de requète : ', $e->getMessage();
     
    	}
     
     
    			}
    selon la doc la définition de l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur: 1064 SQLSTATE: 42000 (ER_PARSE_ERROR)
     
    Message: %s près de '%s' à la ligne %d
    j'ai rien compris !!!
    dans la BDD , les champs m,f......m8,f8 sont de type smallint (5).
    j'ai vérifier le code et y'a pas de caractères spéciaux qui peuvent généré ce type d'erreur.
    at line 1031
    cette ligne n'existe pas dans mon code par contre le 131 sa existe .:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertdata->bindParam(':f1',  $_POST['f1'], PDO::PARAM_INT); // entier
    le résultat de cette ligne est affiché dans le message d’erreur f1=6.

  2. #2
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Bonjour,

    Ce que je peux te conseiller :

    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO DEC(colonne1, colonne2, ..., colonneN) VALUES(value1, value2, ..., valueN)
    Comme ça tu sais exactement si tu as un champ en plus ou pas. Ton problème ce situe peut être du fait que tu rentres une chaine dans un champ int de ta base.
    En faisant de cette manière, tu es sur que tes données iront dans la bonne colonne.

    2.
    Affiche toutes tes variables dans ton catch.
    ça permettra d'en savoir un peu plus sur tes variables

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; Nowwis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $insertdata = $cbd->prepare("INSERT INTO DEC ('',cdet,cdc,datedec,m,f,m1,f1,m2,f2,m3,f3,m4,f4,m5,f5,m6,f6,m7,f7,m8,f8) VALUES('',:cdet,:cdc,:datedec,:m,:f,:m1,:f1,:m2,:f2,:m3,:f3,:m4,:f4,:m5,:f5,:m6,:f6,:m7,:f7,:m8,:f8)");
    au total y'a 22 champs , mais la même erreur s'affiche:
    Erreur de requète : 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 'DEC ('',cdet,cdc,datedec,m,f,m1,f1,m2,f2,m3,f3,m4,f4,m5,f5,m6,f6,m7,f7,m8,f8) VA' at line 1031
    le var_dump() des champs affiche les données exactes:
    string '123' (length=3)

    string '253' (length=3)

    string '2011-02-28' (length=10)

    string '5' (length=1)

    string '3' (length=1)

    string '6' (length=1)

    string '9' (length=1)

    string '4' (length=1)

    string '11' (length=2)

    string '2' (length=1)

    string '3' (length=1)

    string '5' (length=1)

    string '6' (length=1)

    string '11' (length=2)

    string '23' (length=2)

    string '2' (length=1)

    string '3' (length=1)

    string '6' (length=1)

    string '3' (length=1)

    string '4' (length=1)

    string '6' (length=1)
    là je ne sait si je doit convertir les string avant de les enregistrés dans la bdd ou mysql le fait automatiquement.!!!!

  4. #4
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    C'est impossible, tu ne peux pas avoir un nom de colonne qui se nomme ''...

  5. #5
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    oui je suis bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $insertdata = $cbd->prepare("INSERT INTO DEC (cddec,cdet,cdc,datedec,m,f,m1,f1,m2,f2,m3,f3,m4,f4,m5,f5,m6,f6,m7,f7,m8,f8) VALUES('',:cdet,:cdc,:datedec,:m,:f,:m1,:f1,:m2,:f2,:m3,:f3,:m4,:f4,:m5,:f5,:m6,:f6,:m7,:f7,:m8,:f8)");
    c'est un champ cddec de type INT AUTO_INCREMENT , mais l'erreur persiste toujours
    Erreur de requète : 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 'DEC (cddec,cdet,cdc,datedec,m,f,m1,f1,m2,f2,m3,f3,m4,f4,m5,f5,m6,f6,m7,f7,m8,f8)' at line 1031
    j'arrive pas a trouvé la ligne 1031 (mon code a 181 lignes)

  6. #6
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Si c'est un auto-increment, le mieux est de laisser ton SGBD s'en occuper.

    Ta requête doit donc ressembler à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO DEC (cdet,cdc,datedec,m,f,m1,f1,m2,f2,m3,f3,m4,f4,m5,f5,m6,f6,m7,f7,m8,f8) VALUES(:cdet,:cdc,:datedec,:m,:f,:m1,:f1,:m2,:f2,:m3,:f3,:m4,:f4,:m5,:f5,:m6,:f6,:m7,:f7,:m8,:f8)"

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

Discussions similaires

  1. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  2. [C#] pb de requête d'insertion
    Par leycho dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/04/2006, 10h07
  3. [Requête] Problème INSERT INTO
    Par lerico dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 10/01/2006, 17h12
  4. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00
  5. Requête d'insertion multiple avec 1 valeur fixe
    Par [DreaMs] dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/12/2005, 09h28

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