Comment corriger efficacement une requête SQL PDO [Résolu]

msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 2 nov. 2017 à 11:15 - Dernière réponse :  SkyCrasher
- 8 nov. 2017 à 09:24
Bonjour,
Je tente d'enserrer des données dans une table en utilisant PDO.
mais il semble que qu'il y a une erreur dans la requête.

voici l'erreur quand j'execute en direct dans la base de données:

#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 ':periode_etabl_bulletin,:periode_etabl_bulletin_annee,:taux_grad,:num_ordre,:mat' at line 2

voici ma requête :
$tab = array(
              ':periode_etabl_bulletin' => $_GET['periode']
              ,':periode_etabl_bulletin_annee' => $_GET['annee']
              ,':taux_grad' => $_POST["taux_grad"]
			  ,':num_ordre' => $_POST["num_ordre"]
              ,':matricule' => $matricule
              ,':noms' => $rows_pers["nom"]
              ,':prenoms' => $rows_pers["prenom"]
              ,':nationalite' => $rows_pers["nationalie"]
              ,':nb_mois_trav_effect' => $n_nbre_mois
              ,':date_dept_cg' => ''
              ,':cg_ann_acqui' => ''
              ,':fonction' => $rows_pers["fonction"]
              ,':date_entree' => $rows_pers["date"]
              ,':ctg' => ''
              ,':sit_fam' => $rows_pers["sit_fam"]
              ,':chef_fm' => $rows_pers["chef_fm"]
              ,':homfem' => $rows_pers["sexe"]
              ,':nb_enft' => '0'
              ,':nb_part' => ''
              ,':num_cnps' => $rows_pers["num_cnps"]
              ,':salaire_brut' => $rows_sal[$lemois]
              ,':nbrejw' => '30'
              ,':sursalaire' => '0'
              ,':prim_resp' => '0'
              ,':prim_gard' => '0'
              ,':indem_transp' => '0'
              ,':type_sal' => 'Mensuel'
              ,':paymnt' => 'Espece'
              ,':ma_session' => 'Mis79'
              ,':date' => $date_utc
              ,':id_get' => $id_pers
              ,':jour' => $jour
              ,':mois' => $mois
              ,':annee' => $annee
              );
$sql_absc = "INSERT INTO bulletin(periode_etabl_bulletin,periode_etabl_bulletin_annee,taux_grad,num_ordre,matricule,noms,prenoms,nationalite,nb_mois_trav_effect,date_dept_cg,cg_ann_acqui,fonction,date_entree,ctg,sit_fam,chef_fm,homfem,nb_enft,nb_part,num_cnps,salaire_brut,nbrejw,sursalaire,prim_resp,prim_gard,indem_transp,type_sal,paymnt,ma_session,date,id_get,jour,mois,annee) 
        VALUES (:periode_etabl_bulletin,:periode_etabl_bulletin_annee,:taux_grad,:num_ordre,:matricule,:noms,:prenoms,:nationalite,:nb_mois_trav_effect,:date_dept_cg,:cg_ann_acqui,:fonction,:date_entree,:ctg,:sit_fam,:chef_fm,:homfem,:nb_enft,:nb_part,:num_cnps,:salaire_brut,:nbrejw,:sursalaire,:prim_resp,:prim_gard,:indem_transp,:type_sal,:paymnt,:ma_session,:date,:id_get,:jour,:mois,:annee)";			  
 $sql_absc;

$req_absc = $bdd->prepare($sql_absc);
// cette méthode te retourne true/false si ça a réussi/échoué
$result = $req_absc->execute($tab);

// Du coup, on peux tester sur le retour et afficher l'erreur en cas de soucis
if (!$result) {
    // ça t'affiche juste un code. C'est suffisant en prod pour que l'utilisateur te fasse un retour
    echo "Une erreur est survenue : " . $req_absc->errorCode();

    // Mais en dev, pour comprendre, tu peux faire ça :
    print_r($req_absc->errorInfo());
}



voici la structure de ma table:

CREATE TABLE IF NOT EXISTS `bulletin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`periode_etabl_bulletin` varchar(15) NOT NULL,
`periode_etabl_bulletin_annee` varchar(10) NOT NULL,
`taux_grad` int(10) NOT NULL,
`num_ordre` varchar(30) NOT NULL,
`matricule` varchar(30) NOT NULL,
`noms` varchar(200) NOT NULL,
`prenoms` varchar(200) NOT NULL,
`nationalite` varchar(120) NOT NULL,
`nb_mois_trav_effect` varchar(15) NOT NULL,
`date_dept_cg` varchar(30) NOT NULL,
`cg_ann_acqui` varchar(60) NOT NULL,
`fonction` varchar(150) NOT NULL,
`date_entree` varchar(60) NOT NULL,
`ctg` varchar(30) NOT NULL,
`sit_fam` varchar(60) NOT NULL,
`chef_fm` varchar(10) NOT NULL,
`homfem` varchar(60) NOT NULL,
`nb_enft` varchar(10) NOT NULL,
`nb_part` varchar(10) NOT NULL,
`num_cnps` varchar(30) NOT NULL,
`salaire_brut` int(30) NOT NULL,
`nbrejw` int(10) NOT NULL,
`sursalaire` varchar(30) NOT NULL,
`prim_resp` varchar(30) NOT NULL,
`prim_gard` varchar(30) NOT NULL,
`indem_transp` varchar(30) NOT NULL,
`type_sal` varchar(80) NOT NULL,
`paymnt` varchar(50) NOT NULL,
`ma_session` varchar(100) NOT NULL,
`date` datetime NOT NULL,
`id_get` int(11) NOT NULL,
`jour` varchar(30) NOT NULL,
`mois` varchar(30) NOT NULL,
`annee` varchar(30) NOT NULL,
`date2` varchar(30) NOT NULL,
`id_period` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
Afficher la suite 

3 réponses

Répondre au sujet
SkyCrasher 30 Messages postés samedi 4 janvier 2003Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 09:04
0
Utile
Bonjour, je trouve bizarre qu'il y ait $_POST et $_GET, alors que dans un formulaire on choisit soit l'un soit l'autre.
Non?
Commenter la réponse de SkyCrasher
jordane45 20550 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 19 avril 2018 Dernière intervention - 7 nov. 2017 à 12:26
0
Utile
Bonjour,


Pour commencer, ... où est passé la récupération PROPRE des variables AVANT de les utiliser ... tel que je te l'explique depuis au moins 1 an ????

Il serait bien que tu commences ENFIN à suivre le contenu de ce lien http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code et que je n'ai pas à te répéter toujours les mêmes choses à chaque fois que tu viens poser une question sur ce forum !


Ensuite, pour ce qui est de ton souci, peux tu essayer d'écrire la requête comme ceci puis de voir si tu as toujours le même message d'erreur :
<?php

$sql_absc = "INSERT INTO bulletin(
					periode_etabl_bulletin,
					periode_etabl_bulletin_annee,
					taux_grad,
					num_ordre,
					matricule,
					noms,
					prenoms,
					nationalite,
					nb_mois_trav_effect,
					date_dept_cg,
					cg_ann_acqui,
					fonction,
					date_entree,
					ctg,
					sit_fam,
					chef_fm,
					homfem,
					nb_enft,
					nb_part,
					num_cnps,
					salaire_brut,
					nbrejw,
					sursalaire,
					prim_resp,
					prim_gard,
					indem_transp,
					type_sal,
					paymnt,
					ma_session,
					date,
					id_get,
					jour,
					mois,
					annee
					) 
			VALUES (
					:periode_etabl_bulletin,
					:periode_etabl_bulletin_annee,
					:taux_grad,
					:num_ordre,
					:matricule,
					:noms,
					:prenoms,
					:nationalite,
					:nb_mois_trav_effect,
					:date_dept_cg,
					:cg_ann_acqui,
					:fonction,
					:date_entree,
					:ctg,
					:sit_fam,
					:chef_fm,
					:homfem,
					:nb_enft,
					:nb_part,
					:num_cnps,
					:salaire_brut,
					:nbrejw,
					:sursalaire,
					:prim_resp,
					:prim_gard,
					:indem_transp,
					:type_sal,
					:paymnt,
					:ma_session,
					:date,
					:id_get,
					:jour,
					:mois,
					:annee
				)";	


Assures toi également que ton fichier est bien encodé en utf8
Rappel : http://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8#1-verifiez-l-encodage-des-fichiers
Commenter la réponse de jordane45
SkyCrasher - 8 nov. 2017 à 09:24
0
Utile
Regarde aussi tes guillemets:
$_POST["num_ordre"] et $_GET['periode']
Commenter la réponse de SkyCrasher

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.